C++I/O流——(1)I/O流的概念

 

归纳编程学习的感悟,
记录奋斗路上的点滴,
希望能帮到一样刻苦的你!
如有不足欢迎指正!
共同学习交流!
🌎欢迎各位→点赞 👍+ 收藏⭐ + 留言​📝
勤奋,机会,乐观是成功的三要素!

一起加油!

       数据从键盘流入内存,或者从内存流出到显示器都离不开输入/输出操作。C++语言中没有输人输出语句,这样做的目的是为了最大限度地保证语言与平台的无关性,保证输入/输出的操作不被限制在某一个操作系统上。为此,C++内嵌了一个的输入/输出工具包,支持对文件以及一些I/O设备的读写操作,这个工具包就是 I/O 流标准库,通过这个标准库,用户不仅可以直接针对系统已有的数据类型进行输入/输出操作,还可以通过重载运算符对用户自己定义的数据类型对象进行I/O操作。

        C语言中的输入/输出都是由库函数(如scanf和printf来实现的。往往不能保证数据输入/
输出的可靠性。例如,printf("%d","hello");其中格式控制%d错误,但是编译系统并不会报错而是输出字符串的起始地址;又例如:int scanf("%d",a)语中漏写了"&”,但序编译时同样不会检查出错误,而把 a 的值作为地址,将输入的数据存放到该地址所代表的内存中,引起运行出错。C++利用I/O流(如cin和 cout)进行简单的输入/输出编译系统对数据类型进行严格的检查,凡是类型不正确的数据都不能通过编译。因此C++的I/O操作可以保证类型安全。另外,C++的类机制使得它能建立一套可扩展的 I/O系统,通过修改和扩充,能用于用户自己声明的类型的对象的输人/输出。例如,对运算符“<<”和“>>”的重载就是扩展的例子。可扩展性提高了软件的重用性,提高了软件开发的效率。由此,我们可以看到C++在输入/输出方面相比 C 语言的优势所在接下来,将详细的介绍C++输入/输出流。

        数据输入和输出的过程就像流水一样,从一处流向另一处在C++中称为流(Stream),在数据流中流动的是若字节序列通常把数据从输入设备(如键盘和磁盘)流入到程序(内存)的过程称为输入流,而当数据从程序(内存)流出到输出设备(如屏幕、打印机、磁盘等)的过程称为输出流。输入流和输出流中的内容可以括ASCIl码、二进制数据、图像视频音频等各种格式的信息。 

        输入流和输出流都带有内存缓冲区,用来存放流中的数据。当用cout和插入运算符“<<”向显示器输出数据时,先把数据插入到输出流(cout 流),送到程序的输出缓冲区保存,指导缓冲区满了或者遇到endl,就将缓冲区中的全部数据送到显示器显示。在输入时,从键盘输入的数据先放到键盘的缓冲区中。当按回车键时,键盘缓冲区中的数据输入到程序中的输入缓冲区,形成cin 流,然后用提取运算符“>>”从输入缓冲区中提取数据送给程序的有关变量。
        在C++中,将输入流和输出流都分别定义为类,这些类放在 C++语言的 I/O 类库中cin和cout都是iostream类的流对象。
        C++包含一系列流类库,这些流类库是用继承方式建立起来的用于输入/输出的类库。这些类有两个基类:ios类和streambuf类,其他流类都是从这两个基类派生出来的。通过C++流类库,可以实现丰富的I/O功能。

        ios类是输入/输出操作在用户端的接口,提供输入/输出服务。streambuf是处理流缓冲区的类是数据在缓冲区中的管理和数据输入/输出缓冲区的实现。也就是说,ios 负责上层操作,而streambuf负责底层操作,为ios 提供物理级支持。

iostream

ios抽象基类
istream通用输入流和其他输入流的基类
ostream通用输出流和其他输出流的基类
iostream通用输入/输出流和其他输入/输出流的基类

fstream
ifstream输入文件流类
ofstream输出文件流类
fstream输入输出文件流类

strstream
istrsteam输入字符串流类
ostrstream输出字符串流类
strstream输入/输出字符串流类

流类库的定义包含在如下几个头文件中。

        <iostream>;包括istream、ostream iostream 以及cin、cout、ceer 和clog对象的定义,同时也提供了非格式化和格式化的 I/O 服务。若要进行针对标准设备的 I/O 操作则必须包含此文件<strstream>:包含istrstream、ostrstream、strstream的定义,若要使用字符串流象进行针对内存字符串空间的 I/O 操作,则必须包含此文件。

        <fstream>:包含ifstream、ofstream、fstream定义,若要使用文件流对象进行针对磁盘文件的I/O操作,则必须包含此文件。

        <iomanip>:在使用格式化I/时应含此头文件括sets、fixed等操作符的定义含此文件后才能利用操作符函数进行格式化I/O操作。 

        以上就是我对C++I/O流——(1)I/O流的概念的理解,希望本篇文章对你有所帮助,也希望可以支持支持博主,后续博主也会定期更新学习记录,记录学习过程中的点点滴滴。如果有不懂和发现问题的小伙伴,请在评论区说出来哦,同时我还会继续更新对C++I/O流的理解,请持续关注我哦!!! 

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

低代码的应用场景

Gartner 在 2019 年的低代码调研报告中&#xff0c;曾经绘制过一张用来阐述低代码适用场景的“应用金字塔”&#xff0c;如下图所示&#xff1a; 应用级别划分&#xff1a;从下往上&#xff0c;分别为工作组级(Workgroup Class)、部门级(Departmental Class)、企业级(Enterpris…

力扣日记1.10-【二叉树篇】701. 二叉搜索树中的插入操作

力扣日记&#xff1a;【二叉树篇】701. 二叉搜索树中的插入操作 日期&#xff1a;2024. 参考&#xff1a;代码随想录、力扣 —————————————————————— 天哪&#xff0c;上次打开力扣还是2023&#xff0c;转眼已经2024&#xff1f;&#xff01; 两个星期过去…

base64与BytesIO图片进行编码、解码;api调用

base64与BytesIO简单介绍 io.BytesIO 和 Base64 编码都是用于在内存中处理二进制数据的方法&#xff0c;但它们的目的和使用场景有所不同。 1&#xff09; io.BytesIO io.BytesIO 是 Python io 库中的一个类&#xff0c;它提供了一个在内存中处理二进制数据的接口&#xff0…

Vue入门五(Vue-CLI项目搭建|vue项目目录介绍|vue项目开发规范|es6导入导出语法)

文章目录 一、Vue-CLI 项目搭建介绍node环境搭建1) 下载与安装2&#xff09;测试是否安装成功 安装vue-cli安装vue脚手架 创建Vue项目1&#xff09;使用命令创建项目2&#xff09;使用图形化界面创建项目 二、vue项目目录介绍1.命令行运行vue项目2.Pycharm中运行项目3.目录结构…

【Web】CTFSHOW PHP文件包含刷题记录(全)

温故知新。 目录 web78 web79 web80 web81 web82 web83 web84 web85 web86 web87 web88 web78 伪协议base64编码直接读出文件内容就行 ?filephp://filter/convert.base64-encode/resourceflag.php web79 一眼data伪协议包含php脚本 ?filedata://text/plain,<…

Linux基础开发工具--vim

2.vim 代码编辑器 vim共有3种模式&#xff1a; ​ ​ 命令模式&#xff1a; $:将光标定位在当前行最右侧 ^:将光标定位在当前行最左侧 shiftg:将光标移到文本结尾 nshiftg:将光标移到文本第n行 gg:将光标移到文本开始 h:左 j:下 k:上 l:右 nyy:复制当前行/或复制多…

Logstash应用-同步ES(elasticsearch)到HDFS

1.场景分析 现有需求需要将elasticsearch的备份至hdfs存储&#xff0c;根据以上需求&#xff0c;使用logstash按照天级别进行数据的同步 2.重难点 数据采集存在时间漂移问题&#xff0c;数据保存时使用的是采集时间而不是数据生成时间采用webhdfs无法对文件大小进行设置解决…

C++ future/promise/thread/async/packaged_task入门

std::promise、future、thread、async、packaged_task这些到底是个啥&#xff1f; 两种获取异步结果的方式 std::future std::future是一个同步原语&#xff0c;它代表了一个异步操作的结果。这个结果可能来自另一个线程、任务或者异步操作&#xff0c;而std::future提供了一种…

【LeetCode:200. 岛屿数量 | DFS 】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

使用微信读书高效阅读论文,自带翻译功能。

下面以“向文本到图像扩散模型添加条件控制”&#xff08;Adding Conditional Control to Text-to-Image Diffusion Models&#xff09;这篇论文示例下阅读效果。 论文地址&#xff1a;https://arxiv.org/abs/2302.05543 选择右侧的download PDF, 然后进入论文预览页面&#x…

记录误删除docker中极狐gitlab容器恢复过程

如题一次误操作导致删除了docker中极狐gitlab容器恢复过程 情况说明 创建容器时&#xff0c;我是用的是极狐官网推荐安装的步骤&#xff0c;具体按照官网步骤走就行 sudo docker run --detach \--hostname gitlab.example.com \--publish 443:443 --publish 80:80 --publish …

有效的回文

常用方法就是双指针。使用两个指针从字符串的两端向中间移动&#xff0c;同时比较对应位置的字符&#xff0c;直到两个指针相遇。由于题目忽略非字母和非数字的字符且忽略大小写&#xff0c;所以跳过那些字符&#xff0c;并将字母转换为小写&#xff08;或大写&#xff09;进行…