第八章:IO库
笔记
1. c++语言不直接处理输入输出,而是通过一族定义在标准库中的类型来处理IO。这些类型支持从设备读取数据、向设备写入数据的IO操作,设备可以是文件、控制台窗口、内存等。
2. getline函数,从一个给定的istream读取一行数据,存入一个给定的string对象中。如:
string line; // 每次读入一整行,直至到达文件末尾 while (getline(cin, line)) cout << line << endl;
3. 标准库使我们能忽略这些不同类型的流之间的差异,这是通过继承机制实现的。
4. IO对象无拷贝或赋值。
5. 使用流的good或fail函数是确定流总体状态的正确方法。
6. 每个输出流都管理一个缓冲区,用来保存程序读写的数据。
7. 有了缓冲机制,操作系统就可以将程序的多个输出操作组合单一的系统系写操作。由于设备的写操作可能很耗时,允许操作系统将多个输出操作组合为单一的设备写操作可以带来很大的性能提升。
8. 默认情况下,cin和cerr都关联到cout,因此,读cin或写cerr都会导致cout的缓冲区被刷新。
9. 进行open是否成功的检测通常是一个好习惯。
10. 自动构造和析构:
// 对于每个传递给程序的文件执行循环操作 for (auto p = argv + 1; p != argv + argc; ++p) { ifstream input(*p); // 创建输出流并打开文件 if (input) process(input); else cerr << "couldn‘t open : " + string(*P); } // 每个循环步input都会离开作用域,因此会被销毁 // 因为input是while循环的局部变量,它在每个循环步中都要创建和销毁一次。 // 当一个fstream对象离开其作用域时,与之关联的文件会自动关闭(调用close())。
11. 以out模式打开文件会丢弃已有数据。
12. sstream头文件定义了三个类型来支持内存IO,这些类型可以向string写入数据,从string读取数据,就像string是一个IO流一样。
13. strm.str() 返回strm所保存的string的拷贝。
14. 当我们的某些工作是对整行文本进行处理,而其他一些工作是处理行内的单个单词,通常可以使用istringstream。
术语
继承机制(inheritance)、条件状态(condition state)、文件模式(file mode)、文件流(file stream)
2016-11-04 20:33:23