一些基本的IO库设施:
1.IO类
头文件:
iostream定义了用于读写流的基本类型
fstream定义了读写命名文件的类型
sstream定义了读写内存string对象的类型
其中以w开头的类型为支持宽字符wchar_t类型的版本。
- IO类型间的关系
概念上,设备类型和字符大小都不会影响我们要执行的IO操作。标准库使我们能忽略不同类型的流之间的差异,这是通过继承机制是实现的。继承机制使我们可以声明一个特定的类继承自另一个类。我们通常可以将一个派生类(继承类)对象当作其基类(所继承的类)对象来使用。如,类型ifstream和istringstream都继承自istream。
标准库流特性可以无差别地应用于普通流、文件流和string流,以及char或宽字符流版本。
(1)IO对象无拷贝或赋值
我们不能拷贝或对IO对象赋值,也不能将形参或返回类型设置为流类型。进行IO操作的函数通常以引用方式传递和返回流。读写一个IO对象会改变其状态,因此传递和返回的引用不能是const的。
(2)条件状态
- 查询流的状态
- 管理条件状态
(3)管理输出缓存
每个输出流都管理一个缓冲区,用来保存程序读写的数据。有了缓冲机制,允许操作系统将多个输出操作组合为单一的设备写操作可以带来很大的性能提升。
- 刷新输出缓冲区
- unitbuf操纵符
- 关联输入和输出流
- 我们既可以将一个istream对象关联到另一个ostream,也可以将一个ostream关联到另一个ostream。
2.文件输入输出
头文件fstream:
ifstream:读
ofstream:写
fstream:读写
除了继承自iostream类型的行为之外,fstream中定义了一些新的成员来管理与流关联的文件:
(1)使用文件流对象
当我们想要读写一个文件时,可以定义一个文件流对象,并将对象与文件关联起来。每个文件流类都定义了一个名为open的成员函数,它完成一些系统相关的操作,来定位给定的文件,并视情况打开为读或写模式。
- 用fstream代替iostream&
在要求使用基类型对象的地方,我们可以用继承类型的对象来替代。 所以,接受一个iostream类型引用(或指针)参数的函数,可以用一个对应的istream(或sstream)类型来调用。 - 成员函数open和close
- 自动构造和析构
(2)文件模式
- 以out模式打开文件会丢弃已有数据
- 每次调用open时都会确定文件模式
3.string流
头文件:
istringstream:读
ostringstream:写
stringstream:读写
(1)使用istringstream
一些整行文本
一些行内
(2)使用ostringstream
逐步构造输出,最后一起打印