C++学习笔记系列三

来源:互联网 发布:历史股价数据 编辑:程序博客网 时间:2024/06/06 13:25
1、new/delete扩展
  • 使用new表达式时发生的三个步骤:                             
  • 调用名为operator new的标准库函数,分配足够大的原始的未类型化的内存,以保存指定类型的一个对象
  • 运行该类型的一个构造函数去初始化对象
  • 返回指向新分配并构造的构造函数对象的指针 使用
  • delete表达式时,发生的步骤:
  • 调用对象的析构函数
  • 调用名为operator delete的标准库函数释放该对象所用的内存

2、C++的输出输入流
  • 标准输入输出流:cin  和  cout 对象是有缓冲区的,对于cin可以通过函数cin . ignore  清空cin 的缓冲区。有两个参数,第一个是要忽略的大小,第二个是结束符,如果要清空整个流的缓冲区,则一般使用  ignore(std::numeric_limits<std::streamsize>::max(), '\n')
       它在头文件 #include <limits>中。
  • Ctrl + d 结束输入,Ctrl + c  关闭程序。 
  • 1、标准输入输出流 -- 头文件<iostream> cin/cout/cerr-- printf/scanf
  • 2. 文件输入输出流 -- 头文件<fstream> ifstream/ofstream/fstream fprintf   fscanf  fopen fwrite fclose
    • ifstream / fstream  要求文件存在,(要输入),通过 tellg( )获取当前游标位置,seekg()偏移游标位置。除了getline 获取一行外,当文件较大时,也可以用 read( ) 要获取多长数据(字节数)
    • ofstream  不要求文件必须存在,否则及创建。通过 tellp( )获取当前游标位置,seekp()偏移游标位置。
    • 对于文件流,在操作完成之后,要close关闭。
      • 打开方式:  in/ate 
      • out/trunk/app
      • binary
  • 3. 字符串流 -- 头文件<sstream> istringstream/ostringstream/stringstream sscanf  sprintf
    • 字符流不用关闭
    • istringstream输入流,把字符串类型转成其他类型--->可以用来读取配置文件
    • ostringstream输出流把其他类型转成字符串类型  --->将整形数据准换成字符串(多用)。
    • stringstream,相互转换都可以。
3、流的状态
  • badbit     系统级故障,不可恢复    --->  bad( )
  • failbit 可以恢复的错误                   ---->  fail( )
  • eofbit     碰到了文件结尾                ---->eof( )
  • goodbit 有效状态                        ---->good( )
  • 查询流的状态
  • cin.bad()
  • cin.fail()
  • cin.eof()
  • cin.good()
  • 重置状态  cin.clear()

4、文件输入输出流 <fstream>
  • 第一个容器 vector -->在 std 里面,

数组:  vector ---> 动态数组,可以动态扩容。
方法是:
1、先根据当前容量capacity扩展空间,开辟出 2 * capacity 的空间。
2、再把原来空间的元素全部复制到新空间里面去。
3 、在在末尾添加新元素
4、最后回收原来的空间。

vector <int> vex;
vec.size() --->当前数组存放了的大小
vec.push_back() --->向数组里方数据。
vec.capacity();   -->容量-->可以存放的个数
vec.reserve(100); -->设定最大值,先开空间,推荐这样使用。
  • ifstream   文件输入流类型。

ifstream 文件输入流要求文件是存在的。
eg:
  • string word;
  • while(ifs >> word) //因为word是一个字符串,故输入也默认情况下以空格作为分隔符。

ifstream  ifs("a.txt")
string word;
ifs>>word    //默认情况下 >> 是以空格作为分隔符的
getline(ifs,line)     //可以读取一行

vextor<string> lines;
lines.push_back(line);  --->将文件内容,放到vector 容器里面了。

--->  ifs.close();       //关闭文件
  • 输出流,ofstream  

ofstream ofs(“a.out”)
//文件输入流要求文件是存在的,而输出流,不要求,没有则创建一个。

输入流有些函数是 以g结尾的,输入流以p结尾的。

文件模式
ios::in    打开文件做读操作
ios::out   打开文件做写操作,会删除原有数据
ios::app   在每次写之前找到文件尾
ios::trunc 打开文件时清空已存在的文件流
ios::ate   打开文件后立即定位到文件末尾 --->正对输入流
ios::binary 以二进制模式进行IO操作
  • 针对文件输入输出流来说,也需要文件存在
ss.str();   -->输出缓冲区的内容。
  • 字符串流stringstream  
      sprintf( );  -->拼接字符串
原创粉丝点击