C++I/O输入输出

2023-10-31

1.流和缓冲区:

我们通常说的流,可以理解为从一个地方流向另一个地方。在C++中的I/O是指的输入/输出端口,那么I/O流就可以简单的理解为在外部设备和内存之间的数据流动。直白的讲,流实际上是一个字节序列,即:字节流。而C++程序把输入输出看做字节流,所以C++的输入输出是以字节流的形式实现的。输入时,程序从流中抽取字节;输出时,程序将字节插入到输出流中。

简单说下:


输入流:

与输入设备(如键盘)相关联的流,由外部设备流向内存。从输入流中获取数据的操作成为输入、读或者是提取操作。

如:在程序中执行:

cin>>number1>>number2;

那么我们输入 10 20相当于:
将 10 20 通过插入运算符放入内存中:

number1   

    10         

number2 

     20



输出流:

与输出设备(如屏幕)相关联的流,数据由内存流向外部设备。将数据放入输出流的操作被称作:输出。写、或者插入。

如在程序中指向:

cout <<"Name";

那么字符串Name将会通过<<插入运算符从内存流向屏幕。当然具体的流向机制并不是这样简简单单。

输入/输出流:与输入/输出设备相关联的流。


缓冲区:

流的本质既然是字节流,而且输入输出就是字节的插入或者抽取。那么如果我们在插入或者抽取字符的操作中,读取完一个字节进行操作,然后才能去读取操作下一个字节的话,这是十分耗费硬盘活动的,。而且还很麻烦。(注意:是程序通常每次只能处理一个字节的信息。)那么缓冲区的存在就是优化这个问题的。

缓冲区是用作中介的内存块,它是将信息从设备传输到程序或者从程序传输到设备的临时存储工具。既然我们每次只能处理一个字节的信息,这是定下来的。那么我们可以选择从读取方面进行优化,即:

我们每次读取多个字节或者字符放入到缓冲区,然后程序从缓冲区中一个一个字节的处理。这样的方法更快也更方便。


说点题外话:

键盘输入的话每次提供 一个字符,因为在这种情况下就不需要缓冲区来匹配不同的数据传输速率了,但是对键盘进行缓冲可以让用户输入传给程序之间可以返回更正,就像我们在刷算法题,输入数据的时候如果输入错误,并且没有按下回车,就可以退回,重新输入的原因,按下空格之后,缓冲区被刷新,数据传入到程序中处理(刷新缓存区:将缓存区中的整块数据传入给硬盘,并清空缓冲区,以备下一批输入)。


I/O流类关系图:

  



于I/O流相关类的简介表



1.输出

1.<<运算符的重载

<< 运算符本是按位左移运算符,ostream重新定义了<<运算符,将其重载为输出。 这样,<<运算符用于输出时被称作:插入运算符。

那么C++所有的基本类型可以用<<进行输出:

unsigned char;
signed char;
char;
short;
unsigned short;
int
unsigned int;
long;
unsigned long;
long long;
unsigned long long
float;
double
long double;
ostream 类还未下面的指针类型定义了进行了插入运算符的重载函数:
const signed char*;
const unsigned char*
const char*
void*;


使用<< 进行连续的输出:

比如: 

cout << "My"<<"name"<<"is"<<"Lsz";

为什么这句话可以正常的输出呢?

是因为插入运算符返回的类型是ostream&,即:函数的原型为:

ostream & operato

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++I/O输入输出 的相关文章

随机推荐

  • 整流桥-桥式整流工作原理

    整流桥 有多种方法可以用整流二极管将交流电转换为直流电 包括半波整流 全波整流以及桥式整流等 整流桥 就是将桥式整流的四个二极管封装在一起 只引出四个引脚 四个引脚中 两个直流输出端标有 或 两个交流输入端有 标记 应用整流桥到电路中 主要
  • PyQt(Python+Qt)学习随笔:什么是信号绑定(Unbound and Bound Signals)?

    老猿Python博文目录 专栏 使用PyQt开发图形界面Python应用 老猿Python博客地址 1 概述 信号的绑定是由在类的实例变量中第一次通过类实例的方式 即 self 信号 或 实例名 信号 引用时触发 PyQt5会自动将该实例绑
  • python3-元组常用操作和函数

    元组与列表类似 不同点为 格式不同 元组数据使用 小括号 列表数据使用 方括号 元组中的元素不允许修改 删除等操作 即 改变元组中元素的操作都不被允许 元组只存在一个元素时 需要使用 逗号结尾 否则结果默认为对应元素的类型而不是元组 但是列
  • Protrator自动化测试(针对Angular 应用的自动化测试)

    环境准备工作 1 Protrator 是在NodeJs 环境下运行的 所以第一步是安装NodeJS 2 测试本机是否安装了NodeJs 可以命令行下输入 node v 将会输出NodeJS 的版本号 在Window下没有什么好的命令行工具
  • Weblogic-SSRF漏洞复现

    SSRF漏洞存在于http your ip 7001 uddiexplorer SearchPublicRegistries jsp 我们在brupsuite下测试该漏洞 访问一个可以访问的IP PORT 如http 127 0 0 1 7
  • python接口自动化参数传递_2、Python接口自动化系列之unittest结合ddt的使用

    前面一篇我们已经把unittest的常用用法都已经讲过了 可能很多小伙伴有个疑问 unittest框架怎么做数据驱动呢 这节我们就来学习一下 1 unittest 没有自带数据驱动功能 所以如果使用unittest 同时又想使用数据驱动 那
  • vue 后端数据成功返回 页面不渲染_vue能获取到数据数据却渲染不到页面上,为什么?...

    问题描述 从后台可以拿到数据 并打印在控制台但是就是渲染不到页面 我也不知道是为什么 感觉都正常 问题出现的环境背景及自己尝试过哪些方法 尝试用let this this来代替this但是还是没用并且报出success是undefined的
  • 121-----JS基础-----滚轮事件(鼠标)

    一 代码 很简单
  • angularjs--------选择下拉框

    div class id div
  • The NVIDIA driver on your system is too old (found version 10000)

    问题 原因是因为CUDA版本与pytorch版本不匹配 解决办法 查看自己的CUDA版本 我的是CUDA 10 0 https pytorch org 把这行复制到Anaconda Prompt窗口就行了
  • CPU虚拟化

    CPU虚拟化 中央处理器 CPU 是计算机的主要设备之一 是计算机中的核心配件 在计算机体系结构中 CPU是对计算机的所有硬件资源 如存储器 输入输出单元 进行控制调配 执行通用运算的核心硬件单元 计算机系统中所有软件层的操作 最终都将通过
  • @ControllerAdvice 的介绍及三种用法

    学习下 ControllerAdvice 首先 ControllerAdvice本质上是一个 Component 因此也会被当成组建扫描 加了 ControllerAdvice的类为那些声明了 ExceptionHandler InitBi
  • IP地址分类(A类 B类 C类 D类 E类)

    IP地址由四段组成 每个字段是一个字节 8位 最大值是255 IP地址由两部分组成 即网络地址和主机地址 网络地址表示其属于互联网的哪一个网络 主机地址表示其属于该网络中的哪一台主机 二者是主从关系 IP地址的四大类型标识的是网络中的某台主
  • 如何完美解答面试问题——HashMap的扩容机制(JDK1.7)

    大家好 我是孤焰 今天要谈一谈在面试过程中几乎被每个面试官都会提到的一个问题 HashMap的扩容机制是什么 由于我也是刚刚学习编程的小白 所以此篇博文将参考了多篇博文 最后总结而成 此篇博文仅介绍JDK1 8版本之前的HashMap扩容机
  • Unity3D 动画操作

    导入模型 https blog csdn net shenqiankk article details 100064940 方式一 Animator animation SetBool 状态转换的参数 true false 在创建对象前 先
  • 【计算机网络】数据链路层(一):数据帧和物理寻址

    数据链路层是物理层的上层 物理层是把电脑连接起来的物理手段 它主要规定了网络的一些电气属性 其作用是负责传送0和1的电信号 数据链路层位于物理层的上层 简单的阐述它的作用就是确定0和1的分组方式 下面我们就详细的介绍数据链路层 上面是TCP
  • 阿里云DNS 新增云上线路的智能解析功能

    简介 企业在云上部署单元化架构或内部服务链路时 需要考虑让数据 单元 离用户更近 避免跨单元获取数据 以此来满足自身低延时的诉求 阿里云DNS 新增基于云上链路的调度功能 进一步优化DNS智能解析 给云上用户提供更精准的流量调度能力 传统解
  • 基于STM32串口通信的ESP8266WiFi模块使用

    掌握esp8266的使用可以实现真正的万物物联 esp8266wifi通信对于MCU而言归结到底还是串口或spi通信 因此 掌握RS232通信协议 SPI通信协议以及esp8266的配置就可以基本搞定WiFi模块的使用 参考文章 1 ESP
  • 安全帽佩戴检测算法模型训练详细流程

    一 任务描述 实际施工现场需要对每个进出的人员进行安全帽监测 对未佩戴安全帽的人员平台进行风险告警 通知工作人员并记录下来 主要包括三类目标物体 头盔 helmet 人 person 和人头 head 二 实现流程 1 数据集 直接用的网络
  • C++I/O输入输出

    1 流和缓冲区 我们通常说的流 可以理解为从一个地方流向另一个地方 在C 中的I O是指的输入 输出端口 那么I O流就可以简单的理解为在外部设备和内存之间的数据流动 直白的讲 流实际上是一个字节序列 即 字节流 而C 程序把输入输出看做字