《C++Primer》读书笔记——第8章 IO库
来源:互联网 发布:windows pe系统是什么 编辑:程序博客网 时间:2024/05/16 01:28
- IO库类型和头文件【重点】
- 头文件< iostream>读写流
类型istream/ostream/iostream(还有宽字符版本wistream,下同) - 头文件< fstream>读写文件
类型ifstream/ofstream/fstream - 头文件< sstream>读写string
类型istringstream/ostringstream/stringstream
- 头文件< iostream>读写流
- 管理输出缓冲【重点】
导致缓冲刷新(即数据真正写到输出设备或文件)的原因有很多:- 程序正常结束,作为main函数的return操作的一部分,缓冲刷新被执行
- 缓冲区满,
- 使用操纵符显式刷新(如endl,flush,ends)
cout << “hi” << endl;//输出hi和一个换行,然后刷新缓冲区
cout << “hi” << flush;//输出hi,然后刷新缓冲区,不附加任何额外字符
cout << “hi” << ends;//输出hi和一个空字符,然后刷新缓冲区 - 在每个输出操作之后,我们可以用操纵符unitbuf来设置流的内部状态(PS:cerr被默认设置为unitbuf)
cout << unitbuf;//所有输出操作后都会立即刷新缓冲区
//任何操作都立即舒心,无缓冲
cout << nounitbuf;//回到正常的缓冲方式 - 一个输出流可能被关联到另一个流,当读写被关联流时,关联到的流的缓冲区将被刷新。(PS:默认cin cerr都关联到cout,因此读cin写cerr都会导致cout缓冲区刷新)每个流最多关联到一个流,但多个流可以同时关联到同一个ostream
- 文件输入输出
- fstream特有的操作
- fstream fstrm;//创建一个未绑定的文件流
- fstream fstrm(s);//创建一个fstream,并打开名为s的文件
- fstream fstrm(s, mode);//同上,只不过是以mode模式打开
- fstrm.open(s);//打开名为s的文件,并将其与fstrm绑定。返回void
- fstrm.close();//关闭与fstrm绑定的文件。返回void(PS:当一个fstream对象被销毁时,close会自动被调用)
- fstrm.is_open;//返回一个bool值,指出与fstrm关联的文件是否成功打开且尚未关闭
- 文件模式
- in 以读方式打开//与ifstream关联的文件默认以in打开
- out 以写方式打开//与ofstream关联的文件默认以out打开
- app 每次写操作前均定位到文件末尾
- ate 打开文件后立即定位到文件末尾
- trunc 截断文件
- binary 以二进制方式进行IO
PS1:以out模式打开的文件会丢弃已有数据
PS2:以多种模式打开文件:ofstream app(“file”, ofstream::out | ofstream::app)
- fstream特有的操作
- string流
- stringstream特有的操作
- sstream strm;//strm是为绑定的stringstream对象
- sstream strm(s);//strm保存string s的一个拷贝
- strm.str() 返回strm所保持的string拷贝
- strm.str(s) 将string s拷贝到strm中。返回void
- istringstream常用于——带空格的一行字符串
例:
string line, word;
vector< string> str;
while( getline(cin,line) ) {
istringstream strm(line);
while( strm >> word )
str.push_back(word);
} - ostringstream常用于——逐步构造输出,最后一起打印
ostringstream ostrm;
for(const auto &str: vec) {
ostrm << str <<” “;
}
cout << ostrm.str() << endl;
2、3合在一起,即为:多行输入转换为一行输出
- stringstream特有的操作
#include<iostream> #include<vector> #include<sstream> #include<string> using namespace std;int main(){ string line, word; vector< string> vec; while( getline(cin,line) ) { istringstream strm(line); while( strm >> word ) vec.push_back(word); } ostringstream ostrm; for(const auto &str: vec) { ostrm << str <<" "; } cout << ostrm.str() << endl;}
0 0
- 《C++Primer》读书笔记——第8章 IO库
- 《C++Primer》读书笔记——第1章 开始
- 《C++Primer》读书笔记——第4章 表达式
- 《C++Primer》读书笔记——第5章 语句
- 《C++Primer》读书笔记——第6章 函数
- 《C++Primer》读书笔记——第7章 类
- 《C++Primer》读书笔记——第9章 顺序容器
- 《C++Primer》读书笔记——第11章 关联容器
- 《C++Primer》读书笔记——第13章 拷贝控制
- 【c++ primer读书笔记】【第8章】IO流
- C++Primer第5版读书笔记(第8章)
- 《C++ Primer》第8章:IO库
- C++Primer 读书笔记 第1章 开始
- C++Primer 读书笔记 第2章 浏览
- C++primer第4版第八章标准IO库
- C++:C++Primer读书笔记(6)--标准IO库
- 《C++Primer》读书笔记——第2章 变量和基本类型
- 《C++Primer》读书笔记——第3章 字符串、向量和数组
- 实习杂记(31):android多dex方案二
- Effective Modern C++ 条款4 懂得如何查看已推断类型
- python多线程demo
- web前端变长标题
- 电波的频率波长传输距离传输速率等问题总结
- 《C++Primer》读书笔记——第8章 IO库
- C语言利用openSSL库AES模块加密
- IOS-响应式编程
- php中header函数参数的Cache-control:private,no-cache,must-revalidate,max-age是使用方法!
- 利用Access-Control-Allow-Origin响应头解决跨域请求
- 实习杂记(31):android多dex方案三
- 【动画1】UIView动画
- zookeeper 与 java 交互小结
- easyUI与bootstrap制作表单dialog