IO类

iostream定义了读写流的基本类型
istream, wistream 从流读取数据
ostream, wostream 向流写入数据
iostream, wiostream 读写流
fstream定义了读写命名文件的类型
ifstream, wifstream 从文件读取数据
ofstream, wofstream 向文件写入数据
fstream, wfstream 读写文件
sstream定义了读写内存string对象的类型
istringstream, wistringstream 从string读取数据
ostringstream, wostringstream 向string写入数据
stringstream, wstringstream 读写string

fstream和sstream继承自iostream, 这意味着接受一个iostream类型引用(或指针)参数的函数, 可以用一个对应的fstream或sstream类型来调用.

IO对象无拷贝或赋值. 进行IO操作的函数通常以引用方式传递和返回流. 读写一个IO对象会改变其状态, 因此传递和返回的引用不能是const的.

刷新输出缓冲区: endl, flush, ends.

  • endl: 输出缓冲区和一个换行, 然后刷新缓冲区.
  • flush: 输出缓冲区,然后刷新缓冲区.
  • ends: 输出缓冲区和一个空字符, 然后刷新缓冲区.

如果程序异常终止, 输出缓冲区是不会被刷新的.

文件输入输出

fstream特有的操作:
fstream fstrm; 创建一个未绑定的文件流.
fstream fstrm(s); 创建一个fstream, 并打开名为s的文件. s可以是string类型, 或者是一个指向C风格字符串的指针. 这些构造函数是explicit的.
fstream fstrm(s, mode); 以指定的方式打开.
fstrm.open(s); 打开名为s的文件.
fstrm.close(); 关闭与fstrm绑定的流.
fstrm.is_open() 返回一个bool值指出与fstrm绑定的流是否成功打开且尚未关闭.
mode模式有:
in 以读方式打开
out 以写方式打开, 会丢弃已有数据
app 向文件末尾添加
ate 打开文件后立即定位到末尾
trunc 截断文件
binary 以二进制方式打开
// 拷贝文本文件infile.txt内容到outfile.txt
int main()
{
ifstream input("infile.txt"); // 构造一个ifstream并打开给定的文件
ofstream output; // 输出文件流未关联到任何文件
output.open("outfile.txt"); // 打开指定的文件, 文件名可以值C-style字符串, 也可以是string对象(C++11标准) string line;
while(getline(input, line))
{
output << line << endl;
} input.close(); // 当一个fstream对象被销毁时, close会自动调用, 也可以手动关闭
output.close(); return 0;
}

已out模式打开文件会丢失已有数据

保留被ofstream打开的文件中已有数据的唯一方法是显示指定app或者in模式

// file1内容会丢失
ofstream out1("file1"); // 隐含out并trunc模式(截断文件)
ofstream out2("file1", ofstream::out); // 隐含trunc
ofstream out3("file1", ofstream::out | ofstream::trunc);
// file2内容不会丢失
ofstream out4("file2", ofstream::app); // 隐含out模式
ofstream out5("file2", ofstream::out | ofstream::app);

与ifstream关联的文件默认已in模式打开, 与ofstream关联的文件默认以out模式打开, 与fstream关联的文件默认已in和out模式打开.

string流

stringstream 特有操作
sstream strm 创建一个未绑定的sstream对象
sstream strm(s) strm是一个stream对象, 保存string s的一个拷贝. 此构造函数是explicit的.
strm.str() 返回strm所保存的string的拷贝
strm.str(s) 将string s拷贝到strm中.

处理行内单词的个数时, 通常可以使用istringstream.

int main()
{
string in_str("Hello World!"), str;
vector<string> svec;
istringstream iss; // 未绑定的对象
iss.str(in_str);
// istringstream iss(in_str); // 与上面两行等价 while(iss >> str)
svec.push_back(str); // 将每个单词存放到svec中 return 0;
}

当我们想逐步构造, 希望最后一起打印时, ostringstream是很有用的.

int main()
{
ostringstream oss;
// ... 省略若干行
oss << "aaa ";
// ... 省略若干行
oss << "bbbb "; cout << oss.str() << endl;
return 0;
}

[C++ Primer] 第8章: IO库的更多相关文章

  1. 学习 primer 第8章 IO库 小结

    iostream处理控制台IO fstream处理命名文件IO stringstream完成内存string的IO 非常重要!!!!!!!!!!  ========================== ...

  2. 第 8 章 IO库

    第 8 章 IO库 标签: C++Primer 学习记录 IO库 第 8 章 IO库 8.1 IO类 8.2 文件输入输出 8.1 string流 8.1 IO类 IO对象无拷贝或赋值,因此不能将形参 ...

  3. 《C++ Primer》笔记 第8章 IO库

    iostream定义了用于读写流的基本类型,fstream定义了读写命名文件的类型,sstream定义了读写内存string对象的类型. 标准库使我们能忽略这些不同类型的流之间的差异,这是通过继承机制 ...

  4. 【c++ Prime 学习笔记】第8章 IO库

    C++语言不直接处理输入输出,而是通过标准库中的一组类来处理IO 1.2节介绍的IO库: istream(输入流)类型,提供输入 ostream(输出流)类型,提供输出 cin,是istream对象, ...

  5. 《C++primer》v5 第8章 IO库 读书笔记 习题答案

    8.1.8.2 这一章不咋会啊.. istream &read(istream &is) { int a; auto old_state=is.rdstate(); is.clear( ...

  6. C++ Primer 5th 第8章 IO库

    IO类对象不允许进行拷贝操作. IO类中定义后一些函数和标志,可以用于访问和操作流的状态. 一旦流发生错误,后续IO操作都是失败的. 读写IO对象会改变IO对象的状态. 每个输出流都管理一个缓冲区. ...

  7. C++primer第三章标准库类型

    除第二章介绍的基本数据类型外,C++ 还定义了一个内容丰富的抽象数据类型标准库. 本章将介绍标准库中的 vector.string 和 bitset 类型. string 类型支持长度可变的字符串 v ...

  8. C++Primer,C++标准IO库阅读心得

    IO 标准库类型和头文件 iostream istream 从流中读取 ostream 写到流中去 iostream 对流进行读写:从 istream 和 ostream 派生而来fstream if ...

  9. C++ Primer 第三章 标准库类型vector+迭代器iterator 运算

    1.vector: 标准库类型vector表示对象的集合,其中所有对象的类型都相同,集合中的每个对象都有一个与之对应的索引,索引用于访问对象.因为vector“容纳着”其他对象,所以它也常被称作容器( ...

随机推荐

  1. 【javascript】浏览器用户代理检测脚本实现

    以下是完整的用户代理字符串检测脚本,包括检测呈现引擎.平台.Windows操作系统.移动设备和游戏系统. var client = function(){ // 呈现引擎 var engine = { ...

  2. 初探动态规划(DP)

    学习qzz的命名,来写一篇关于动态规划(dp)的入门博客. 动态规划应该算是一个入门oier的坑,动态规划的抽象即神奇之处,让很多萌新 萌比. 写这篇博客的目标,就是想要用一些容易理解的方式,讲解入门 ...

  3. Python学习札记(三十九) 面向对象编程 Object Oriented Program 10

    参考:使用枚举类 NOTE #!/usr/bin/env python3 from enum import Enum def main(): Mouth = Enum('Mouth', ('Jan', ...

  4. UVa 1662 Brackets Removal

    https://vjudge.net/problem/UVA-1662 题意: 给出一个序列,判断序列中哪些括号是可以去掉的,只可以改变符号.输出括号最少的序列. 思路: 感觉这道题目就是写起来繁琐了 ...

  5. Ubuntu server 禁止显示器休眠

    Linux不让显示器休眠的方法 # setterm -blank # setterm -blank n (n为等待时间)

  6. python 输出时间

    import datetime print(datetime.datetime.now().time())

  7. Android Studio之高德地图实现定位和3D地图显示

    在应用开发中,地图开发是经常需要使用的“组件”,国内比较出名的是就是百度地图和高德地图. 此博客讲的是高德地图实现定位和3D地图显示,并标注相应位置,话不多说,先看看效果,在上代码. 效果如图: 首先 ...

  8. Linux中查看进程和杀掉进程

    ps -A查看正在运行的所有进程 kill -9 xxx杀掉某个进程,xxx为进程ID.

  9. 最短路之SPFA算法

    部分来自:http://blog.csdn.net/juststeps/article/details/8772755 求最短路径的算法有许多种,除了排序外,恐怕是OI界中解决同一类问题算法最多的了. ...

  10. C++ 类型转换的特殊用法

    C++ 类型转换的特殊用法 下面是ossimLsrRay.h中的一个例子 /*! * CASTING OPERATOR: ossimEcefRay() * Looks like a construct ...