我读C++ Primer - IO库

C++ 语言不直接处理输入输出,而是通过一组定义在标准库的类型处理IO。其主要包括 iostream(读写流的基本类型)  fstream(读写文件的类型)  sstream(读写内存string对象的类型)


1  IO类    头文件<iostream>

不能拷贝或对IO对象赋值。常用引用方式传递和返回流。

IO操作可能发生错误,可以使用一些函数以及标志来访问和操纵流的条件状态。

确定一个流对象的状态的最简单的方式是将他当做一个条件来使用,如:

while (cin>>word)
    ....
每个输出流都管理一个缓冲区,用来保存程序读写的数据。有了缓冲机制,操作系统就可以将程序的多个输出操作组合成单一的系统级写操作,因为设备的写操作很耗时,因此此举可以带来很大的性能提升。

导致缓冲刷新的原因:程序正常结束;缓冲区满了;手动操作,如endl ;用操纵符unitbuf设置流的内部状态,清空缓冲区;一个输出流被关联到另一个流。

刷新输出缓冲区:

cout<<"hi"<<endl;  // 输出hi + \n
cout<<"hi"<<flush; // 输出hi 
cout<<"hi"<<ends;  // 输出hi + ‘ ’
cout<<unitbuf;     // 所有输出操作之后都立即刷新缓冲区
...
cout<<nounitbuf;   // 回到正常的缓冲方式
另外,因为标准库将cout 与cin 关联在一起,所以输入任何值同样导致输出缓冲区刷新,要绑定流,用tie

如果程序崩溃,输出缓冲区不会被刷新。


2  文件输入输出    头文件<fstream>

当我们想要读写一个文件时,可以定义一个文件流对象,并将对象与文件关联起来,如:

ifstream in(ifile);
ofstream out;
out.open(ifile + ".copy");                                                                                                                                if (out)                                                                                                                                                      ...
每个流都有一个文件模式,指出如何使用文件:

in     读

out   写
app  追加

ate   打开文件后即定位到结尾

trunc  截断文件

binary  二进制读写

默认情况,ifstream用in打开,ofstream用out打开,fstream用in和out打开


3  string流    头文件<sstream>

当我们的某些工作是对整行文本进行处理,而其他一些工作是处理行内的单个单词时,通常可以使用istringstream,如:

string line, word;
while (getline(cin,line))   // 读取一行存入string对象line
{
    istringstream is(line); // 将string对象转换成is流对象
    while (is>>word)        // 每次读取一个string对象word
          ...
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值