第 8 章 IO库
第 8 章 IO库
标签: C++Primer 学习记录 IO库
8.1 IO类
- IO对象无拷贝或赋值,因此不能将形参或返回类型设置为流类型,进行 IO操作的函数通常以引用方式传递和返回流。又因为读写一个流会改变其状态,所以不能是 const引用!
- IO操作因为需要频繁地与外部设备进行数据传递,很容易出错。IO库中设置了一些函数和标志来操纵流的条件状态。
- badbit,不可恢复的错误
- failbit,可恢复的错误
- 到达文件结束位置,eofbit和 failbit都会被置位。
- 由于设备的写操作可能很耗时,所以操作系统会将多个输出操作合为单一的系统级写操作,即缓冲机制。
- 导致缓冲刷新的原因有很多:
程序正常结束,作为 main函数的 return操作的一部分,缓冲刷新被执行。
缓冲区满时,需要刷新缓冲,而后新的数据才能继续写入缓冲区。
操纵符显式刷新。
- endl,完成换行并刷新缓冲区
- flush,刷新缓冲区,但不输出任何额外的字符
- ends,插入一个空字符,然后刷新缓冲区
使用 unitbuf设置流的内部状态,告诉流在接下来的每次操作之后都进行一次 flush操作,而 nounitbuf则重置流,使其恢复正常的系统管理的缓冲区刷新机制。
cout << unitbuf; // 所有输出操作后都会立即刷新缓冲区
cout << nounitbuf; // 回到正常的缓冲方式
关联输入和输出流。标准库中, 是将 cin关联到 cout上的,任何试图从输入流读取数据的操作都会先刷新关联的输出流。对于交互式系统,这意味着用户提示信息会在读操作之前被打印出来。
8.2 文件输入输出
在操作文件流对象之前,进行 open是否成功的检测通常是一个好习惯。
// 检测 open是否成功
if (out) {
}
读入和写出的文件,默认是与 cpp/h代码文件在同一路径下的。
当一个 fstream对象离开其作用域时, close会被自动调用,与之关联的文件会自动关闭。
未指定文件模式时, ifstream默认以 in模式打开,ofstream默认以 out模式打开,fstream默认以 in和 out模式打开。
默认情况下,以 out模式打开文件,就同时也意味着 trunc模式,已有数据会被截断。如果要保存已有数据,需要在打开文件时同时指定 app模式(定位到文件末尾)。
8.1 string流
- 当我们的某些工作是对整行文本进行处理,而其他一些工作是处理行内的单词时,通常可以使用 istringstream。同样的,而当需要频繁地文件输出操作或在输出字符串前还要进行某些操作时,可以先将输出内容写入到一个 ostringstream中,然后一次性输出。
- stringstream流就是一个string流的缓冲机制,有点类似于 vector<string>,只是 stringstream流本身是一个流,支持流的输入和输出操作。
第 8 章 IO库的更多相关文章
- 《C++ Primer》笔记 第8章 IO库
iostream定义了用于读写流的基本类型,fstream定义了读写命名文件的类型,sstream定义了读写内存string对象的类型. 标准库使我们能忽略这些不同类型的流之间的差异,这是通过继承机制 ...
- 【c++ Prime 学习笔记】第8章 IO库
C++语言不直接处理输入输出,而是通过标准库中的一组类来处理IO 1.2节介绍的IO库: istream(输入流)类型,提供输入 ostream(输出流)类型,提供输出 cin,是istream对象, ...
- 《C++primer》v5 第8章 IO库 读书笔记 习题答案
8.1.8.2 这一章不咋会啊.. istream &read(istream &is) { int a; auto old_state=is.rdstate(); is.clear( ...
- C++ Primer 5th 第8章 IO库
IO类对象不允许进行拷贝操作. IO类中定义后一些函数和标志,可以用于访问和操作流的状态. 一旦流发生错误,后续IO操作都是失败的. 读写IO对象会改变IO对象的状态. 每个输出流都管理一个缓冲区. ...
- [C++ Primer] 第8章: IO库
IO类 iostream定义了读写流的基本类型 istream, wistream 从流读取数据 ostream, wostream 向流写入数据 iostream, wiostream 读写流 fs ...
- 学习 primer 第8章 IO库 小结
iostream处理控制台IO fstream处理命名文件IO stringstream完成内存string的IO 非常重要!!!!!!!!!! ========================== ...
- 第8章 IO库 自我综合练习
要求: 文本内容: Tom 11144455 12345678998 Jone 88888888 99999999999 1.将文本文件中的内容读入,并显示到屏幕上: 2.手动输入“Mary 77 ...
- 【转载】C++ IO库
本篇随笔为转载,原贴地址:<C++ Primer>第8章 IO库 学习笔记. 1.IO类 #include <iostream> istream//从流中读取数据 ostrea ...
- C++ Primer 读书笔记: 第8章 标准IO库
第8章 标准IO库 8.1 面向对象的标准库 1. IO类型在三个独立的头文件中定义:iostream定义读写控制窗口的类型,fstream定义读写已命名文件的类型,而sstream所定义的类型则用于 ...
随机推荐
- hihocoder Challenge 29 B.快速乘法
这题的题解和我写的有一拼,异常简洁,爆炸. 这题思路dp 表示的是讨论到第位,并比原数的前n位多了 显然j只能取0,1,毕竟2进制嘛 之后转移就好了,注意下面两个重要状态 #include <c ...
- [mysql] 2进制安装和简单优化
##################################mysql 2进制安装和简单优化################################################## ...
- CentOS 7.0 启动多个MySQL实例(mysql-5.7.21)
Linux系统:CentOS-7.0 MySQL版本:5.7.21 Linux系统下启动多个MySQL实例,目前知道有两种方法,一种是通过官方提供的mysqld_multi.server来实现,但是我 ...
- 空间主页播放任意FLV格式视频方法
把文件上传到QQ网络硬盘 打开 硬盘 的 管理 选项 然后它会打开QQ邮箱的文件中转站 找到你要的视频文件 点击下载它 这里建议你使用搜狗浏览器打开网页 来到下载按钮点击下载,在弹出的对话框中选择 ...
- 【网络流24题】最长k可重区间集(费用流)
[网络流24题]最长k可重区间集(费用流) 题面 Cogs Loj 洛谷 题解 首先注意一下 这道题目里面 在Cogs上直接做就行了 洛谷和Loj上需要判断数据合法,如果\(l>r\)就要交换\ ...
- [HDU5765]Bonds
题面 题意 给出一张\(n\)点\(m\)边无向连通图,求每条边出现在多少个割集中. \(n\le20,m\le\frac{n(n-1)}{2}\) sol 所谓割集,就是指把\(n\)个点分成两个集 ...
- [BZOJ1926][SDOI2010]粟粟的书架
BZOJ Luogu Description 幸福幼儿园 B29 班的粟粟是一个聪明机灵.乖巧可爱的小朋友,她的爱好是画画和读书,尤其喜欢 Thomas H. Cormen 的文章.粟粟家中有一个 R ...
- 8Manage:聚焦研发企业利器——研发项目管理
[导读]研发是企业保持核心竞争力的基石.那么对于研发企业来说,如何计划研发项目目标.保障项目的稳定运行,如何分配人才.资源,把控项目成本呢?这些一系列问题摆在管理者面前!引入8Manage研发项目管理 ...
- JavaScript方面的书籍
我要向大家推荐两本js方面的书: <JavaScript权威指南> <JavaScript高级程序设计>适合想在js方面有所提高的开发人员 我们读书是为了什么? 有的人可能是兴 ...
- 去中心化类微博应用 mastodon
一句话重点,去中心,没监管,自己对自己信息做主,没人随便删你消息的分布式社交应用 mastodon. 建了一个实例, https://cncs.io 来专门讨论计算机相关信息,欢迎大家注册来玩.已有用 ...