C++ IO库

来源:互联网 发布:计算机二级考试 知乎 编辑:程序博客网 时间:2024/04/29 08:14

8.1 IO类

头文件 类型 iostream (w)istream,(w)ostream,(w)iostream fstream (w)ifstream,(w)ofstream,(w)fstream sstream (w)istringstream,(w)ostringstream,(w)stringstream

8.1.1 IO对象无拷贝或者赋值

8.1.2 条件状态

strm::iostate

状态位 备注 检查函数 strm::badbit 流崩溃,系统级错误,不可恢复,badbit置位则无法再使用 s.bad() strm::failbit IO操作失败,可以修正 s.fail() strm::eofbit 到达文件结束 s.eof() strm::goodbit 流未出于错误状态。此值为0 s.good()
设置流s的状态函数 备注 s.clear() 将流S所有条件状态位都复位,将流的状态设置为有效,返回void s.clear(flags) 根据给定的flag标志位,将流s对于状态位复位,返回void,flags类型为strm::iostate s.setstate(flags) 根据给定的flag标志位,将流s对于状态位置位,返回void,flags类型为strm::iostate s.rdstate() 返回流s的当前条件状态,返回值类型为strm::iostate

while(cin>>word)
//返回的是流的状态,如果badbit、failbit、eofbit任何一个被置位,检测流状态条件都会失败

8.1.3 管理输出缓冲

每个输出流都管理一个缓冲区,用来保存程序读写的数据。
利用缓冲机制,操作系统将程序多个输出操作合并成单一的系统级写操作,带来很大的性能提升。

缓冲刷新:数据真正写到输出设备或文件

导致缓冲刷新的原因:
1、程序正常结束
2、缓冲区满
3、使用操作符如endl
4、unitbuf清空缓冲区
5、一个输出流关联到另一个流

缓冲类型:全缓冲(文件) 行缓冲(键盘输出输入) 无缓冲(cerr)

刷新缓冲区

操作符 备注 endl 添加换行,然后刷新缓冲区 flush 不附加任何额外字符的刷新缓冲区 ends 添加空字符,然后刷新缓冲区 unitbuf 每次写操作都flush nounitbuf 回到正常的缓冲方式

关联输入和输出流
标准库将cout和cin关联在一起,于是
cin>>ival;
导致cout缓冲区被刷新

关于tie函数
见http://www.cplusplus.com/reference/ios/ios/tie/

8.2 文件输入输出

头文件< fstream>
ifstream 从一个给定文件读取数据
ofstream 向一个给定文件写数据
fstream 可以读写给定文件

一些操作
fstream fstrm;
fstream fstrm(s);
fstream fstrm(s,mode)
fstrm.open(s)
fstrm.close();
fstrm.is_open()

fstream对象被销毁时,close会自动被调用

8.2.1 文件模式mode

in
out
app
trunc
ate
binary

8.3stream流

头文件 sstream
istringstream 从string读取数据
ostingstream 向string写数据
stringstream 读写string
操作:
sstream strm;
sstream strm(s);
strm.str() 返回strm所保存的string的拷贝
strm.str(s) 将string s拷贝到strm中,返回void

原创粉丝点击