【C++ Primer】标准IO库
来源:互联网 发布:云上数据属于 编辑:程序博客网 时间:2024/06/06 04:35
八、标准IO库
1. IO标准库
标准库:
头文件 类型
iostream istream, ostream, iostring从前两者派生而来
fstream ifstream, ofstream, fstream从iostream派生而来
sstream istringstream, ostringstream, stringstream从iostream派生而来
国际字符的支持: 在处理类前加“w”:wostream/wistream
IO对象不可复制或赋值(和继承有一定关系,后面说明):
如果需要传递或返回IO对象,则必须传递或返回指向该对象的指针或引用: ofstream &pring(ofstream &)
对IO对象的读写会改变其状态,因此引用必须是非const的。
条件状态:
badbit: 系统级故障、通常流不能再使用,此时 s.bad()返回true
failbit: 可恢复的错误 s.fail()返回true
eofbit:文件结束符,同时还设置了failbit s.eof()返回true
s.clear()将所有状态值都重设为有效;s.clear(flag)将某一个状态设置为有效,如flag = istream::fail, 则将错误输入取消;s.setstate(flag)设置状态;s.rdstate()返回当前状态,是strm::iostate类型
可以同时设置多个状态:is.setstate(ifstream:badbit | ifstream:failbit)
逗号操作符:计算每一个操作符,返回最右边操作数作为整个操作的结果:while(cin >> val, !cin.eof())
每个IO对象管理一个缓冲区,用于存储程序读写的数据,下面情况会刷新缓冲区:
1. 程序正常结束,清空所有缓冲区
2. 缓冲区已满,在写下一个值之前刷新
3. 用操作符如endl(插入一个新行、输出时应多用endl而不是\n)、ends(插入空字符null)、flush(不插入任何数据)显示刷新
4. 每次输出操作完了之后,用unitbuf操作符设置流的内部状态:
cout << unitbuf << "hello" << "world" << nounitbuf(重新变成缓冲区刷新方式);
以上等同于: cout << "hello" << flush << "world" << flush;
5. 将输出流与输入流关联(tie)起来,这时,在读输入流时将刷新其关联的输出缓冲区: cin与cout绑定在一起,因此cin >> val会导致cout相关的缓冲区被刷新;
cin.tie(0)会导致取消上述绑定,cin.tie(&cout)会重新绑定;
2. 文件输入与输出
ifstream、ofstream等fstream对象如果使用open或使用文件名作初始化式,需要传递的实参为C风格字符串,可通过string调用c_str成员函数:
ifstream infile(ifile.c_str());
ofstream outfile; outfile.open("out");
文件模式:
in 读操作、ifstream、fstream
out 写操作 ofstream、fstream
app 在写之前找到文件尾 ofstream、fstream
ate 打开文件后定位到文件尾 所有模式
trunc 打开文件时清空已存在文件流(同out) ofstream、fstream
binary 以二进制模式进行IO操作 所有模式
fstream inOut("copyOut", fstream::in | fstream::out),默认情况同时使用in out 模式,同时使用in与out模式,则不清空文件内容
fstream inOut("copyOut", fstream::in | fstream::out | fstream::trunc) 清空文件内容。
可直接通过判断infile、outfile的状态来判断打开文件是否成功。
在将文件流重新绑定到新的文件之前必须先将文件流关闭。调用close()成员函数。同时,需要调用clear()函数来清除原有的文件流状态,不调用clear则会保留上一次的文件流状态。如果上一次流出现错误或者已经读到文件的末尾,不清楚流的状态则不能继续使用该流。
3. 字符串流
stringstream strm(s) : s是string类型的对象
strm.str() : 返回存储的string类型对象
strm.str(s) : 将string类型的s复制给strm,返回void
处理输入:
string line, word;
while(getline(cin, line))
{
istringstream stream(line);
while(stream >> word){
//do operations
}
}
一般情况下,使用输入操作符读string时,空白符和换行符将会忽略。
int val1, val2;
string format("val1: 512\nval2: 1024");
istringstream strm(format);
string dump;
strm >> dump >> val1 >> dump >> val2;
- C++primer 标准IO库
- C++Primer 标准IO库
- 《C++primer》 函数 标准IO库
- c++Primer,八,标准IO库
- C++:C++Primer读书笔记(6)--标准IO库
- c++primer学习笔记 ( 第八章 标准IO库)
- C++Primer笔记 第八章 标准IO库
- 【c++primer】第八章01——标准IO库
- C++Primer学习笔记(8)标准IO库
- c++Primer简单回顾--C++标准库IO
- C++primer第4版第八章标准IO库
- c++ primer 标准IO库
- [C++ Primer] 标准IO库
- 【C++ Primer】标准IO库
- C++ primer 标准IO库
- C++primer(八)标准输入输出(标准IO)
- 《C++ Primer》八章 标准IO库
- C++ Primer 第八章 标准IO库
- CountDownLatch
- mvc开发模式
- find命令用法1
- Hadoop的SequenceFile文件<转>
- visual fox pro两段示例小程序
- 【C++ Primer】标准IO库
- MATLAB在Linux上报Warning: Unable to create com.mathworks.mde.explorer.Explorer解决方法
- 火车进站(全排列)
- shell getopt 用法
- Wpf GridSplitter usage Sample
- mtlab中如何在.mat和.txt之间转换
- Please ensure that adb is correctly located at
- Java反射与内省机制总结
- 顺序表与链表的比较