您的位置:首页 > 编程语言 > C语言/C++

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

2016-01-20 10:39 288 查看
1.IO类型在三个独立的头文件中定义:

iostream定义读写控制窗口的类型;

fstream定义读写已命名文件的类型;

sstream定义读写存储在内存中的string对象;

2.IO对象不可复制和赋值:

a.只有支持复制的元素类型可以存储在vector等容器中,所以流对象不能存储在容器中;

b.形参和返回类型不能为流类型,如果需要传递和返回IO对象,必须传递或返回指向该对象的指针或引用;

3.输出缓冲区管理

下面几种情况将导致缓冲区的内容被刷新:

a.程序正常结束(作为main返回工作的一部分,将情况所以输出缓冲区);

b.在缓冲区可能满了的时候;

c.用操纵符显示刷新缓冲区,如行结束符endl;

d.在每次输出操作执行完后,用unitbuf操纵符设置流的内部状态,从而清空缓冲区;

e.可将输出流与输入流关联起来,这时,在读输入流时将刷新其关联的输出缓冲区;

[code]cout << "hi!" <<flush; //刷新流,不添加数据
cout << "hi!" <<ends; //插入空字符null,刷新流
cout << "hi!" <<endl; //插入换行,刷新流


[code]//unitbuf在每次执行完写操作后都刷新流
//nounitbuf将流恢复为正常的刷新方式
cout << unitbuf << "first" << " second" << nounitbuf;
//等价于
cout << "first" << flush << " second" << flush;


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

4.文件流对象

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


在尝试打开新文件之前,必须先关闭当前的文件流;

*如果要重用文件流读写多个文件,必须在读另一个文件之前调用clear清除该流的状态;

5.stringstream对象的使用

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


stringstream还提供了多种数据类型之间的自动格式化。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: