《c++ primer》chap8 The IO library 小结

8.1 IO 类

iostream 头文件:istream, ostream, iostream类

fstream 头文件:ifstream, ofstream, fstream类,从istream...继承

sstream 头文件:istringstream, ostringstream, stringstream类,从istream...继承

 

若要输出 wchar_t 类型而不是 char, 则用 wcin, wcout, wcerr 而不是 cin, cout, cerr

 

IO 对象无法赋值,或复制,但能以别名的方式作为函数参数或返回值,实现输入和输出。

 

 

IO 对象的状态:

  iostate, 它有四个值 badbit(出错), failbit(失败), eofbit(文件末), goodbit(良好,值为0)

    eof(), fail(), bad(), good() 返回上面四个值

    clear() 重置

    clear(flags) 重置为 flags

    setstate(flags)

    rdstate() 返回 iostate的值

输出对象的缓冲

  为了提高效率,计算机会整合若干次输出内容,放在缓冲区,缓冲区满了才输出一次。

  以下操作会清理缓冲区(全部输出)

    程序结束

    缓冲区满了

    输出endl

    cout<<unibuf; cerr的内容自动加了unibuf,所以 cerr 输出的所有内容立即输出

    cin, cerr 都与 cout 绑定,所以使用 cin, cerr 时 cout 都自动清理缓冲。

  注意,程序出错中断,并不会清理缓冲,可能一些中间输出信息在缓冲区,还没有输出。

 

8.2 文件输入和输出

  因为 ifstream, ofstream, fstream 都是 继承自 istream, ostream, iostream,所以 iostream 中的操作,fstream的对象都可以用。

  例如 >>, <<, getline(istream, string)

  ifstream 对象可以如下打开文件

ifstream in(ifile); //打开 file 文件
ofstream out;
out.open( ifile + ".copy" );

  关闭一个文件,才能打开另一个文件

out.close();

  如果在一个函数中定义文件流对象,并打开文件,函数结束时会自动关闭这个文件。

  文件打开模式:

  in  读取内容

  out  写入内容

  app  追加内容

  ate  打开后定位到文件末尾

  trunc  在out模式下,删除原内容再写入

  binary  二进制读取/写入  

ofstream out("file2", ofstream::app); //追加内容
ofstream out("file1"); //默认out, trunc 模式

8.3 string 流

需要包括头文件 sstream。从一个 string 中读取内容,不是从文件中读取,所以叫做 in-memory IO

以下链接中有较为详细的总结:

https://blog.csdn.net/liitdar/article/details/82598039

sstream strm; 
sstream strm(s); // string 流对象 strm 中复制了一份 string s 的内容
strm.str(); // 返回 strm 中储存的 string
strm.str(s) // 将 s 中的内容复制进 strm 对象,不返回值
strm.clear(); // 清空strm中的内容。重复使用strm时,必须strm.clear()一次。

比如:

sstream strm("morgan 2015 2034");
string name, word;
vector<string> phones;
strm>>name;
while(strm>>word)
    phones.push_back(word);

posted on 2020-03-24 21:57  luyi07  阅读(151)  评论(0编辑  收藏  举报

导航