7、IO库

来源:互联网 发布:知乎 性观念 编辑:程序博客网 时间:2024/05/01 10:15

1、IO类:iostream读写流;fstream读写命名文件;sstream读写内存string对象。
这里写图片描述

C++定义的宽字符类型和函数的名字以w开始。

(1)不能拷贝IO对象,因此不能将形参或返回类型设置为流类型,进行IO操作的函数通常以引用方式传递和返回流。

(2)流可能处于错误状态,因此代码通常应该在使用一个流之前检测它是否处于良好状态。

(3)缓冲机制,操作系统将程序的多个输出操作组合成单一的系统级写操作。(endl,flush,ends会刷新缓冲区)。

2、类型fstream和stringstream都继承自iostream,接受一个iostream类型引用或指针参数的函数,可以用一个fstream或sstream类型对象来调用

文件流
3、为将文件流关联到另一个文件,必须首先关闭已经关联的文件
这里写图片描述

//定义一个名为in的输入文件流并打开给定文件ifileifstream in(ifile);//先关闭再关联另一个文件in.close();in.open(ifile, + "2");

4、
这里写图片描述
ifstream关联的文件默认以in模式打开;oftream关联的文件默认以out模式打开;与fstream关联的文件默认以in和out模式打开。默认情况下,打来一个ofstream时会清空文件,为阻止清空要同时指定app模式。

ofstream app("file2", ofstream::app);

string流
5、对整行和行内单词进行处理可以使用istringstream

//PersonInfo类存每个人的名字和可变数量的号码struct PersonInfo{    string name;    vector<string> phones;};//line存行,word存单词string line, word;//可变数量的人,每个人对应一个PersonInfovector<PersonInfo> people;//record只是创建的一个istringstream 流的名字while(getline(cin, line)){    PersonInfo info;    istringstream record(line);    record >> info.name;    while(record >> word)        info.phones.push_back(word);    people.push_back(info);}

6、逐步构造输出,最后一起打印,ostringstream很有用。
这里写图片描述

for(const auto &i_people : people){    ostringstream ostr;    for(const auto &i_phones : entry.i_people )        ostr << " " << format(i_phones );    //os输出缓冲区内容    os << i_people.name << " " <<  ostr.str() << endl; }