重学C++ (六) 标准IO库

1.IO类型在三个独立的头文件中定义:
iostream定义读写控制窗口的类型;
fstream定义读写已命名文件的类型;
sstream定义读写存储在内存中的string对象;

2.IO对象不可复制和赋值:
a.只有支持复制的元素类型可以存储在vector等容器中,所以流对象不能存储在容器中;
b.形参和返回类型不能为流类型,如果需要传递和返回IO对象,必须传递或返回指向该对象的指针或引用;

3.输出缓冲区管理
下面几种情况将导致缓冲区的内容被刷新:
a.程序正常结束(作为main返回工作的一部分,将情况所以输出缓冲区);
b.在缓冲区可能满了的时候;
c.用操纵符显示刷新缓冲区,如行结束符endl;
d.在每次输出操作执行完后,用unitbuf操纵符设置流的内部状态,从而清空缓冲区;
e.可将输出流与输入流关联起来,这时,在读输入流时将刷新其关联的输出缓冲区;

cout << "hi!" <<flush; //刷新流,不添加数据
cout << "hi!" <<ends; //插入空字符null,刷新流
cout << "hi!" <<endl; //插入换行,刷新流
//unitbuf在每次执行完写操作后都刷新流
//nounitbuf将流恢复为正常的刷新方式
cout << unitbuf << "first" << " second" << nounitbuf;
//等价于
cout << "first" << flush << " second" << flush;

**输出应多使用endl而非’\n’(没有刷新缓冲区的作用)

4.文件流对象

//构造输入输出流并绑定到ifile和ofile上
//IO标准库使用C风格字符串,所以如果是string对象,需要调用c_str成员
ifstream infile(ifile.c_str());
ofstream outfile(ofile.c_str());

在尝试打开新文件之前,必须先关闭当前的文件流;
*如果要重用文件流读写多个文件,必须在读另一个文件之前调用clear清除该流的状态;

5.stringstream对象的使用

string line, word;
while (getlin(cin, line)) //读取一行
{
    istringstream stream(line); //将读取的行与stream绑定
    while (stream >> word) //读入每行中的单词
    {
        //do something
    }
}

stringstream还提供了多种数据类型之间的自动格式化。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值