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的输入文件流并打开给定文件ifile
ifstream 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;
//可变数量的人,每个人对应一个PersonInfo
vector<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;
}