C++ Primer Plus 学习笔记(八)——输入、输出和文件

1 流和缓冲区

C++程序把输入和输出看作字节流。输入时,程序从输入流中抽取字节;输出时,程序将字节插入到输出流中。

缓冲区是用作中介的内存块,它是将信息从设备传输到程序或从程序传输给设备的临时存储工具,通过使用缓冲区可以更高效地处理输入和输出。

iostream 文件中包含了一些专门设计用来实现、管理流和缓冲区的类:

  • streambuf 类为缓冲区提供了内存,并提供了用于填充缓冲区、访问缓冲区内容、刷新缓冲区和管理缓冲区内存的类方法。
  • ios_base 类表示流的一般特征,如是否可读取、是二进制流还是文本流等。
  • ostream 类是从 ios 类派生而来的,提供了输出方法。
  • istream 类也是从 ios 类派生而来的,提供了输入方法。
  • iostream 类是基于 istream 类和 ostream 类的,因此继承了输入方法和输出方法。

1.1 iostream 类库对象

C++ 的 iostream 类库管理了很多细节。例如,在程序中包含 iostream 文件将自动创建 8 个流对象(4个用于窄字符流,4个用于宽字符流):

  • cin 对象对应于标准输入流,默认会被关联到标准输入设备(通常为键盘)。wcin 对象与此类似,但处理的是 wchar_t 类型。
  • cout 对象对应于标准输出流,默认会被关联到标准输出设备(通常为显示器)。wcout 对象与此类似,但处理的是 wchar_t 类型。
  • cerr 对象对应于标准错误流,可用于显示错误信息,默认会被关联到标准输出设备(通常为显示器),这个流没有被缓冲,这意味着消息将被直接发送给屏幕。wcerr 对象与此类似,但处理的是 wchar_t 类型。
  • clog 对象也对应于标准错误流,默认会被关联到标准输出设备(通常为显示器),这个流被缓冲。wclog 对象与此类似,但处理的是 wchar_t 类型。

1.2 ostream 对象方法

重载的 << 作为插入操作符,将其重载为输出。支持识别 C++ 中所有的基本类型和部分指针类型(const signed char*、const unsigned char*、const char*、void*)。

ostream& operator<< (T value);

由于插入操作符的调用返回类型是 ostream&,因此也支持拼接输出 cout << a << b。

  • put() 方法用于显示字符,write() 方法用于显示字符串。

  • 控制符 flush 用于刷新缓冲区。

实际上,这类控制符如 flush 也是函数,只是因为 << 重载了,所以支持这样调用:cout << flush,等价于 flush(cout)。

  • 插入操作符在将值转为文本格式时,对char值、数值、字符串都有默认的格式化方式,但是可以调用相应函数来改变格式化的方式。

dec、hex、oct:修改显示时使用的计数系统。

width:调整字段宽度。

fill:填充字符。

precision:设置浮点数显示精度。

setf:控制浮点数打印的相关格式选项,例如 cout.setf(ios_base::showpoint) 可以选择打印末尾的 0 和小数点。

  • iomanip 头文件提供了以上简化调用的控制符,例如 setprecision()、setfill()、setw()。

1.3 istream 对象方法

同样地,重载的 >> 作为抽取操作符,支持将输入数据转换为目标指定的格式。

istream& operator>> (T& value);

1.4 流状态

cin 或 cout 对象包含一个描述流状态的数据成员(从 ios_base 类继承)。

流状态(ios_state 类型,是一种 bitmask 类型)由 3 个 ios_base 元素组成:eofbit、badbit、failbit。

请添加图片描述

  • get(char&) 和 get(void) 方法提供不跳过空白的单字符输入功能。

请添加图片描述

  • get(char*, int, char) 和 getline(char*, int, char) 方法在默认情况下会读取整行。

请添加图片描述

  • ignore(int = 1, int = EOF) 方法用于读取并丢弃字符。

  • read() 方法用于读取指定数目的字节,并将它们存储在指定的位置。

  • peek() 方法返回输入中的下一个字符,但不抽取输入流中的字符。

  • gcount() 方法返回最后一个非格式化抽取方法读取的字符数(即不是用 << 读取的)。

  • putback() 方法将一个字符插入到输入字符串中,被插入的字符将是下一条输入语句读取的第一个字符。

2 文件输入和输出

头文件 fstream 定义了用于文件输入的 ifstream 类、用于文件输出的 ofstream 类和用于同步文件 I/O 的 fstream 类。

文件打开:

  • ifstream is; is.open(“filePath”);
  • ifstream is(“filePath”);

文件关闭:

  • is.close();

在打开文件时,可以提供指定文件模式的第二个参数:

ifstream is(“filePath”, mode);

请添加图片描述

2.1 二进制文件

将数据存储在文件中时,可以将其存储为文本格式或二进制格式。

为执行二进制 I/O,需要使用 ios_base::binary 模式。

3 内核格式化

C++ 库还提供了 sstream 族,它们使用相同的接口提供程序和 string 对象之间的 I/O。读取 string 对象中的格式化信息或将格式化信息写入 string 对象中被称为内核格式化

sstream 头文件定义了从 ostream 类派生而来的 ostringstream 类和从 istream 类派生而来的 istringstream 类。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/6500.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

HTTP协议:当下最主流的应用层协议之一,你确定不了解一下吗?

一.HTTP协议的含义http是什么&#xff1f;超文本传输协议&#xff08;Hyper Text Transfer Protocol&#xff0c;HTTP&#xff09;是一个简单的请求-响应协议&#xff0c;它通常运行在TCP之上。‘超’可以理解为除了文本之外的图片&#xff0c;音频和视频&#xff0c;和一些其他…

STM32基于HAL工程FREERTOS读取DS18B20数据+串口输出

STM32基于HAL工程FREERTOS读取DS18B20数据串口输出✨申明&#xff1a;本文章仅发表在CSDN网站&#xff0c;任何其他网站&#xff0c;未注明来源&#xff0c;见此内容均为盗链和爬取&#xff0c;请多多尊重和支持原创!&#x1f341;对于文中所提供的相关资源链接将作不定期更换。…

无需公网IP,远程连接SQL Server数据库【内网穿透】

文章目录1.前言2.本地安装和设置SQL Server2.1 SQL Server下载2.2 SQL Server本地连接测试2.3 Cpolar内网穿透的下载和安装2.3 Cpolar内网穿透的注册3.本地网页发布3.1 Cpolar云端设置3.2 Cpolar本地设置4.公网访问测试5.结语1.前言 数据库的重要性相信大家都有所了解&#xf…

现代前端开发者的自我迷失,你还会前端基础知识吗?

通常来说&#xff0c;我认为情况并不算糟糕&#xff0c;熟练的手可以几乎做到一切。然而&#xff0c;最近我注意到一些事情改变了我对这个行业的看法。似乎在这些无尽的趋势、范式和新奇玩意中&#xff0c;我们忘记了前端开发的支柱&#xff08;意思是忘记了基础知识&#xff0…

【python】GIL全局锁

一、原理&#xff1a; 全局解释器锁&#xff08;Global Interpreter Lock&#xff0c;GIL&#xff09;规定全局范围内任意时候一个进程里只能同时执行一个线程。每一个线程在执行时&#xff0c;都会锁住GIL&#xff0c;以阻止别的线程执行&#xff1b;执行一段时间后&#xff…

OBCP第四章 SQL调优-SQL执行性能监控

(g)v$sql_audit 全局 SQL 审计表 基于虚拟表__all_virtual_sql_audit的视图&#xff0c; 该虚拟表对应的数据存放在一个可配置的内存空间中 由于存放这些记录的内存是有限的&#xff0c;因此到达一定内存使用量&#xff0c;会触发淘汰 可以用来查看每次请求客户端来源&…

【操作系统复习】第3章 处理机调度与死锁 3

死锁&#xff08;Deadlock&#xff09;&#xff1a;指多个进程在运行过程中因争夺资源而造成的一种僵局&#xff0c;当进程处于这种僵持状态时&#xff0c;若无外力作用&#xff0c;这些进程都将永远不能再向前推进。 对资源不加限制地分配可能导致进程间由于竞争资源而相互制约…

JavaSE学习总结(十三)Set集合HashSet集合LinkedHashSet集合TreeSet集合比较器的使用利用Set集合实现去重

JavaSE学习总结&#xff08;十三&#xff09;Set集合/HashSet集合/LinkedHashSet集合/TreeSet集合/比较器的使用/利用Set集合实现去重 一、Set集合 Set集合是Collection集合的一个子接口&#xff0c;实际上Set就是Collection&#xff0c;只是行为略有不同&#xff1a; Set集…

VUE3项目实现动态路由demo

文章目录1、创建vue项目2、安装常用的依赖2.1 安装elementUI2.2 安装axios2.3 安装router2.4 安装vuex2.5 安装store2.6 安装mockjs3、编写登录页面以及逻辑4、编写首页以及逻辑5、配置router.js6、配置store.js7、配置menuUtils.js&#xff08;动态路由重点&#xff09;8、配置…

树的前序遍历与中序遍历构造二叉树和树的中序遍历与后序遍历构造二叉树

目录 一.树的前序遍历与中序遍历构造二叉树 1.题目描述 2.问题分析 3.代码实现 二.树的中序遍历与后序遍历构造二叉树 1.题目描述 2.问题分析 3.代码实现 三.问题思考 一.树的前序遍历与中序遍历构造二叉树 1.题目描述 给定两个整数数组 preorder 和 inorder &#xf…

【机器学习】Logistic回归---学习笔记

Logistic回归学习笔记Logistic回归学习线路预备知识&#xff1a;建议先去B站学习一下信息量&#xff0c;熵&#xff0c;BL散度&#xff0c;交叉熵的概念。Logistic回归的函数模型损失最小化架构分类函数最大概率分类函数阈值分类函数Logistic回归的优化算法梯度下降随机梯度下降…

4.5--计算机网络之基础篇--2.网址到网页解析--(复习+深入)---好好沉淀,加油呀

1.浏览器做的第一步工作是解析 URL 对 URL 进行解析&#xff0c;从而生成发送给 Web 服务器的请求信息 URL? URL 实际上是请求服务器里的文件资源 当没有路径名时&#xff0c;就代表访问根目录下事先设置的默认文件&#xff0c;也就是 /index.html 或者 /default.html 这些文件…

计算机网络复习笔记(三)物理层

文章目录一物理层的基本概念四大特性&#xff1a;两种信号&#xff1a;调制和编码传输介质三大部分二物理层的基本通信技术四种信道复用技术数据的传输方式三OSI模型一物理层的基本概念 四大特性&#xff1a; 机械特性 接口是怎么样的 电气特性 用多少伏的电 功能特性 线路上…

linux基础之计算机基础

一、计算机基础 &#xff08;1) 计算机发展&#xff1a;电子管、晶体管、集成电路、大规模集成电路 &#xff08;2) 冯诺依曼体系&#xff1a;用二进制表示数据和指令&#xff1b; 存储程序控制&#xff0c;程序和数据预先存入存储器&#xff1b; 计算机系统5大部分&#xf…

Python 高级编程(文件操作)

文件&#xff1a;存储在某种长期存储设备上的数据&#xff01;&#xff01;包括&#xff08;硬板 u 盘 移动硬盘 光盘&#xff09; 计算机中临时的数据&#xff1a; 存储在内存中&#xff0c;一旦操作结束&#xff0c;内存中的空间就会被释放 文件&#xff08;特指普通文本&am…

R语言 4.2.2安装包下载及安装教程

[软件名称]:R语言 4.2.2 [软件大小]: 75.6 MB [安装环境]: Win11/Win10/Win7 [软件安装包下载]: https://pan.quark.cn/s/b6f604930d04 R语言软件的GUI界面比较的简陋,只有一个命令行窗口,且每次创建图片都会跳出一个新的窗口,比较的繁琐,我们可以安装RStudio,来更方便的操作R(…

ChatGPT +工业机器人/自动驾驶控制器的一些尝试

ChatGPT 的功能目前已扩展到机器人领域&#xff0c;可以用语言直观控制如机械臂、无人机、家庭辅助机器人等的多个平台。这会改变人机交互的未来形式吗&#xff1f; 你可曾想过用自己的话告诉机器人该做什么&#xff0c;就像对人说话那样&#xff1f; 比如说&#xff0c;只要告…

多个硬盘挂载到同一个目录

同一目录无法重复挂载&#xff0c;后挂载的会覆盖之前挂载的磁盘。但是现在需要将4块磁盘并行挂载&#xff0c;该如何操作呢&#xff1f; 将2块磁盘合并到一个逻辑卷 进行挂载。 基本知识 基本概念PV(Physical Volume)- 物理卷物理卷在逻辑卷管理中处于最底层&#xff0c;它可…

新能源锂电池行业除杂工艺介绍

近年来新能源汽车快速发展对锂电池的需求引发了人们对锂资源的高度关注。由于锂需求不断上升&#xff0c;全球锂资源越来越紧缺&#xff0c;而在生产含锂产品中会有大量废水、废渣。这些废水废渣含有丰富的锂&#xff0c;对其进行回收提锂具有极高的经济利益。在氟化锂生产中会…

文件操作介绍及C语言实现通讯录管理系统3.0最终版(文件操作版本)

文章目录1. 前言2. 文件操作2.1 什么是文件2.2 文件缓冲区2.3 文件指针2.4 文件的打开与关闭2.5 文件的顺序读写3. 优化通讯录3.1 保存通讯录3.2 加载通讯录4. 结尾1. 前言 上一篇文章我们学习了动态内存开辟的相关知识点&#xff0c;并用动态内存函数优化了我们的通讯录&…