这一节主要掌握C++中的标准IO控制库,在C++中,IO控制主要分为三类,对标准输入输出设备的读写、对文件的读写、C字符串的对谢赫对string字符串的读写。
1.STL中关于IO控制的头文件和类
a. IO有关头文件
iostream、istream、ostream、fstream、sstream、strstream
b. IO控制类
cin, cout, cerr, clog, wcin, wcout, wcerr, wclog类,对标准输出设备刘德操作,属于iostream头文件。
fstream, ifstream, ofstream类,对文件流的操作,属于fstream头文件。
stringstream, istringstream, ostringstream类,对string流的操作,属于sstream头文件
ostream, wostream类,输出流,属于ostream头文件。
istream, wistream, iostream wiostream类,属于istream头文件。
这些类的继承关系:
iostream是istream, ostream的派生类;ifstream, istringstream, istrstream是istream的派生类;ofstream,ostringstream, ostrstream是ostream的派生类,
fstream, stringstream, strstream是iostream类的派生类。
ostream类,istream类是最上层的基类。
c.所有IO控制流泪不能复制和赋值。
2. IO标准库的条件状态
a.条件状态
strm:: iostate, strm::badbit, strm::eofbit, strm::failbit
b. 条件函数
s.bad() 如果设置了流s的badbit值,则返回true.
s.eof() 如果设置了流s的eofbit值,则返回true.
s.fial() 如果设置了流s的failbit值,则返回true.
s.goog() 如果流s处于有效状态,则返回true.
s.clear() 将流s的所有状态都设成有效值
s.clear(flag) 将流s的某个状态设成有效值
s.setstate(flag) 设定流s的某个状态值
s.rdstate() 返回流s的当前状态
3. 刷新流的缓冲区符号
endl, 刷新缓冲区并换行
ends, 以NULL填充传冲区,并刷新缓冲区
flush, 刷新缓冲区
unibuf, 刷新所有输出,例如cout << unibuf <<"Liu"<<"Li";每个“<<”后,都会刷新缓冲区
nounibuf 解除unibuf.
4. 文件IO流的打开模式
例如:fstream(filename, 打开模式)
ios_base:: in 以读文件方式打开,只能读取文件中的字符
ios_base::out 以写文件方式打开,只能将字符写入文件中
ios_base :: app 写文件之前找到文件末尾
ios_base ::ate 找到文件末尾
ios_base :: trunc 在写文件之前先清空文件
有效的组合方式:
out|trunc, out|app, out|ate, out|in|trunc,
5. stringstream的特殊操作
string s;
stringstream strm(s); 用s初始化一个流strm
strm.str(s); 将s读入流strm中
strm.str(); 返回流中的string
6. stringstream提供转换或格式化
例如:
int val = 0;
stringstream >> "Val value:" >> val; //val会自动转换成string
string s = "125";
stringstream(s);
stringstream << val;//将"125"自动转换成int, 并且赋值给val。