IO库设施
- istream:输入流类型,提供输入操作。
- ostream:输出流类型,提供输出操作
- cin:一个istream对象,从标准输入读取数据。
- cout:一个ostream对象,向标准输出写入数据。
- cerr:一个ostream对象,向标准错误写入消息。
- 运算符<<:用来从一个istream对象中读取输入数据。
- <<运算符:用来向一个ostream对象中写入输出数据。
- getline函数:从一个给定的istream对象中读取一行数据,存入到一个给定的string对象中。
IO类
标准库定义的IO类型
- iostream头文件:从标准流中读写数据,istream、ostream等。
- fstream头文件:从文件中读写数据,ifstream、ofstream等。
- sstream头文件:从字符串中读写数据,istringstream、ostringstream
IO对象不可复制或赋值
- IO对象不能存在容器里.
- 形参和返回类型也不能是流类型。
- 形参和返回类型一般是流的引用。
- 读写一个IO对象会改变其状态,因此传递和返回的引用不能是const的。
流的条件状态 strm是一种IO类型
strm:iostate
strm:badbit
strm:failbit
strm:eofbit
strm:goodbit
s.eof()
s.fail()
s.bad()
s.good()
s.clear()
s.clear(flags)
s.setstate(flags)
s.rdstate()
管理输出缓冲
- 每个输出流都管理一个缓冲区,执行输出的代码,文本串可能立即打印出来,也可能被操作系统保存在缓冲区内,随后再打印。
- 刷新缓冲区,可以使用如下IO操纵符:
- endl:输出一个换行符并刷新缓冲区。
- flush:刷新流,单不添加任何字符。
- ends:在缓冲区插入空字符null,然后刷新。
- unitbuf:告诉流接下来每次操作之后都要进行一次flush操作。
- nounitbuf:回到正常的缓冲方式。
cout<<"hi"<<endl;
cout<<"hi"<<flush;
cout<<"hi"<<ends;
cout<<unitbuf;
cout<<nounitbuf;
cin >> ival;
文件输入输出
- 头文件fstream定义了三个类型来支持文件IO:
- ifstream从一个给定文件读取数据。
- ofstream向一个给定文件写入数据。
- fstream可以读写给定文件。
fstream特有的操作
fstream fstrm;
fstream fstrm(s);
fstream fstrm(s, mode);
fstrm.open(s)
fstrm.close()
fstrm.is_open()
文件模式
in
out
app
ate
trunc
binary
string流
- 头文件sstream定义了三个类型来支持内存IO:
- istringstream从string读取数据。
- ostringstream向string写入数据。
- stringstream可以读写给定string。
- stringstream特有的操作
sstream strm //定义一个未绑定的stringstream对象
sstream strm(s) //用s初始化对象
strm.str() //返回strm所保存的string的拷贝
strm.str(s) //将s拷贝到strm中,返回void