C++ Primer 第五版 第八章 IO库

ops/2024/10/19 7:37:00/
一、IO类

C++通过一组定义在标准库中的类型来处理IO。这些类型支持从设备读取数据、向设备写入数据的IO操作,设备可以是文件、控制台窗口等。

IO库定义了读写内置类型值的操作。此外,一些类,如string,通常也会定义类似的IO操作,来读写自己的对象。

一、IO类

iostream定义了用于读写流的基本类型,fstream定义了读写命名文件的类型,sstream定义了读写内存string对象的类型。

宽字符版本的类型和函数以一个w开始。

类型ifstream和istringstream都继承自istream,因此我们可以像使用istream对象一样来使用ifstream和istringstream对象。类似的,类型ofstream和ostringstream都继承自ostream。

1. IO对象无拷贝或赋值

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

2. 条件状态

3. 管理输出缓冲

刷新输出缓冲区

① 操作符endl :完成换行并刷新缓冲区;

② 操作符flush : flush刷新缓冲区,但不输出任何额外的字符;

③ 操作符ends : ends向缓冲区插入一个空字符,然后刷新缓冲区。

unitbuf操作符

关联输入和输出流

tie有两个重载的版本:一个版本不带参数,返回指向输出流的指针。如果本对象当前关联到一个输出流,则返回的就是指向这个流的指针,如果对象未关联到流,即返回空指针。tie的第二个版本接受一个指向ostream的指针,将自己关联到ostream。即,x.tie()&o将流x关联到输出流o。

二、文件输入输出

头文件fstream定义了三个类型来支持文件IO:ifstream从一个给定文件读取数据,ofstream向一个给定文件写入数据,以及fstream可以读写给定文件。

1. 使用文件流对象

当我们想要读写一个文件时,可以定义一个文件流对象,并将对象与文件关联起来。每个文件流都定义了一个名为open的成员函数,它完成一些系统相关的操作,来定位给定的文件,并视情况打开为读或写模式。

文件名既可以是string对象,也可以是C风格字符串数组。

用fstream代替iostream&

成员函数open和close

如果我们定义了一个空文件流对象,可以随后调用open来将它与文件关联起来:

自动构造和析构

2. 文件模式

每个流都有一个关联的文件模式(file mode),用来指出如何使用文件。

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

每次调用open时都会确定文件模式

三、string流


http://www.ppmy.cn/ops/38879.html

相关文章

C补充1—1章1.0—C程序语言设计(许宝文,李志)

二手书到了,好消息,前主人看的很认真,坏消息,只看到这页了 啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊最后几题好难啊啊啊啊啊,再议 目录 1.1 入门 1.2 变量与算数表达式 练习1-3 //打印温度对照表 练习1-4 //摄氏-华氏温…

Docker快速启动清单

以下容器均使用 Docker version 24.0.2 版本测试使用,这里需要注意一下,高版本的Docker不支持镜像V1版本,不知道怎么操作才可以让它支持,所以推荐使用低版本 如果觉得不直观,或者觉得有点乱,可以访问以下网…

【js】将一维数组处理成树形数据并且实现模糊查询

项目中由于数据量不大,后台并未做处理,因此前端拿到返回的Table数据需要处理成树形数据再渲染到表格中 原始数据 const dataList[{"id": 44,"seedlingName": "测试2","seedlingType": "测试2",&quo…

第18讲:Ceph集群CrushMap的核心概念、默认规则与完整定义

文章目录 1.CrushMap核心概念2.集群默认的CrushMap规则剖析2.1.CrushMap列表显示内容剖析2.2.对默认的CrushMap规则进行深度的剖析2.3.完整的CrushMap定义信息 1.CrushMap核心概念 CrushMap官方文档:https://docs.ceph.com/en/pacific/rados/operations/crush-map/…

Linux的命令

; 昨天学习了七个命令,分别是:cd命令(切换目录)、pwd命令(当前目录)、mkdir命令(创建目录)、touch命令(创建文件)、date命令(显…

面试算法之哈希专题

赎金信 class Solution { public:bool canConstruct(string ransomNote, string magazine) {// 小写字母int r_cnt[26];int m_cnt[26];for(int i 0; i< magazine.size(); i) {m_cnt[magazine[i]-a]; // 统计}// 对比for(int i 0; i< ransomNote.size(); i) {if(m_cnt[r…

【一起深度学习——沐的Resnet】

沐神的Resnet 原理图&#xff1a;实现&#xff1a;定义残差块&#xff1a;定义Resnet模型&#xff1a;运行测试&#xff1a;输出结果&#xff1a; 原理图&#xff1a; 实现&#xff1a; 定义残差块&#xff1a; class Residual(nn.Module):def __init__(self,input_channels,…

Spark云计算平台Databricks使用,第一个Spark应用程序WordCount

1 上传文件 上传words.txt文件&#xff1a;Spark云计算平台Databricks使用&#xff0c;上传文件-CSDN博客 上传的文件的路径是/FileStore/tables/words.txt&#xff0c;保存在AWS的S3 hello world hello hadoop hello world hello databricks hadoop hive hbase yarn spark …