关于C++的IO流简单总结

基础IO流

C++的IO以面向对象的形式实现, 同时兼容了C语言面向过程的IO方式
在这里插入图片描述
C++ 标准库提供了四个基本流对象:

cin:用于从标准输入(通常是键盘)读取数据。
cout:用于向标准输出(通常是控制台)写入数据。
cerr:用于向标准错误输出写入数据,通常用于报告错误。
clog:用于向标准日志输出写入数据,通常用于记录日志信息。

  • C++中可以通过重载流插入和流提取(std::istream、std::ostream)操作符更好的支持自定义对象的输入输出

如下:

string str;
while(cin >> str){}

上述该种方式输入时, 首先是因为string重载了>>操作符, 调用了istream& operator >> (istream& is, string& str)重载函数, 然后返回值调用了operator bool() 将自定义类型转换成对应的true或者false(bool类型)进行判断.

结束该进程时, 可以通过Ctrl + C直接杀死进程, 或者Ctrl + Z + 换行表示读取到了结尾即退出循环

  • tips1: 将自定义类型转换为内置类型时, 可以通过重载对应的explicit operator 类型(){} 函数来实现, 如operator int(){return _a}//无显式写出返回值,但是要返回对应类型的变量 ,内置类型转换为自定义类型时, 则是通过自定义类型对应的构造函数实现.

  • tips2: 自定义类型实现的流插入和流提取可以提供给cout/cin, ifstream/ofstream等类型的流提取和流插入函数实现多态使用, 可更方便的构造自定义类型.如

    Date date;
    cin >> date;
    //或者是如下
    ifstream ifs("date.txt");//默认打开方式是文本读的方式
    ifs >> date;//可直接读入该date对象中
    

  • 二进制读写: 在内存中是如何存储则如何写到磁盘文件(以如下模式打开文件流:ios_base::in | ios_base::binary)

    • 优点: 读写效率高
    • 缺点
      • 写出的内容无法读懂
      • 对于需要深浅拷贝的自定义类型无法正确拷贝(地址会改变)
  • 文本读写: 对象数据序列化字符串写出, 读回时也是字符串, 即由二进制序列, 反序列化转成对象数据(即将字符串转为对应数据)
    (以字符串方式读写)

    • 优点: 能够读懂写出的内容
    • 缺点: 存在转换过程, 效率较慢
  • 上述读写方式当要进行自定义类型的读写时, 只要自定义类型重写了流插入和流提取操作符, 都可直接使用流插入和流提取进行操作

    即可以直接如下方式操作进行写入文件(同cout和cin的使用一样, 默认以空格或换行分割)

    Date date;
    ofstream ofs("date.txt");
    ofs << date;
    

文件流

C++ 提供了 std::fstream、std::ifstream 和 std::ofstream 类来支持文件 IO。

std::fstream:同时支持读写文件。
std::ifstream:只支持从文件读取数据。
std::ofstream:只支持将数据写入文件。

#include <fstream>  
#include <iostream>  
  
int main() {  
    std::ofstream outfile("example.txt");  
    if (!outfile) {  
        std::cerr << "Error opening file for writing!" << std::endl;  
        return 1;  
    }  
  
    outfile << "Hello, world!" << std::endl;  
    outfile.close();  
  
    std::ifstream infile("example.txt");  
    if (!infile) {  
        std::cerr << "Error opening file for reading!" << std::endl;  
        return 1;  
    }  
  
    std::string line;  
    while (std::getline(infile, line)) {  
        std::cout << line << std::endl;  
    }  
  
    infile.close();  
  
    return 0;  
}

字符流

C++ 提供了 std::stringstream、std::istringstream 和 std::ostringstream 类来支持字符串 IO。

std::stringstream:同时支持从字符串读取和写入数据。
std::istringstream:只支持从字符串读取数据。
std::ostringstream:只支持将数据写入字符串。

#include <sstream>  
#include <iostream>  
  
int main() {  
    std::string input = "123 456 789";  
    std::istringstream iss(input);  
  
    int num;  
    while (iss >> num) {  
        std::cout << num << std::endl;  
    }  
  
    std::ostringstream oss;  
    oss << "The sum is " << (123 + 456 + 789);  
    std::cout << oss.str() << std::endl;  
  
    return 0;  
}

格式化输出

C++ 提供了各种流操纵符(如 std::setw、std::setprecision、std::left、std::right 等)来格式化输出
一般不常用,还是使用printf吧

#include <iostream>  
#include <iomanip> // 包含流操纵符  
  
int main() {  
    double pi = 3.141592653589793;  
    std::cout << std::fixed << std::setprecision(2) << pi << std::endl; // 输出两位小数的π  
    std::cout << std::setw(10) << std::left << "Hello" << std::endl; // 左对齐并设置字段宽度为10  
    std::cout << std::setw(10) << std::right << "World" << std::endl; // 右对齐并设置字段宽度为10  
  
    return 0;  
}

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

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

相关文章

IGS 天线文件内容解读

文章目录 Part.I IntroductionChap.I 预备知识 Part.II 文件的下载Chap.I 下载地址Chap.II 文件类型 Part.III 文件内容解读Chap.I 文件头Chap.II 数据块说明Chap.III 数据块示例 Reference Part.I Introduction 本文将对 IGS 发布的天线文件 *.atx 进行一个简要的解读。 Chap…

QTreeWidget 详解

QTreeWidget 详解 QTreeWidget 是 PyQt5 框架中的一个重要部件&#xff0c;它提供了树形结构的视图&#xff0c;可以用于显示层级数据。以下是 QTreeWidget 的详细讲解&#xff0c;包括基本用法、主要方法和属性以及如何与其他组件进行交互。 基本用法 导入模块 要使用 QTree…

QListWidget详解

QListWidget详解 QListWidget 是 PyQt5 中一个方便的部件&#xff0c;用于创建和管理列表。它继承自 QListView&#xff0c;并提供了一些高级功能&#xff0c;使得添加和管理列表项更加简单。以下是 QListWidget 的详解&#xff0c;包括基本用法、主要方法和属性以及如何与其他…

安装PyTorch详细步骤

&#x1f4a5;注意事项&#xff1a; CPU版和GPU版选一个进行安装即可 如果有Nvidia显卡&#xff0c;则安装cuda版本的PyTorch&#xff0c;如没有nvidia显卡&#xff0c;则安装cpu版。 目前常见的深度学习框架有很多&#xff0c;最出名的是&#xff1a;PyTorch&#xff08;faceb…

hypack如何采集多波束数据?(下)

多波束测量模块 1&#xff09;记录多波束和辅助传感器的数据&#xff1b; 2&#xff09;显示实时改正后的数据和数据质量信息。 ​编辑​ 测量准备 1&#xff09;设置大地测量参数和硬件设置&#xff1b; 2&#xff09;计划测线 计划测线是一定间距的平行线&#xff0c;…

DuGa-DIT论文翻译

Dual Gated Graph Attention Networks with Dynamic Iterative Training for Cross-Lingual Entity Alignment 双门控图注意力网络与跨语言实体对齐的动态迭代训练 Abstract 近年来&#xff0c;跨语言实体对齐引起了相当大的关注。过去使用传统方法来匹配实体的研究都有一个…

传输大咖26|想找可替代FTP升级的国产信创软件?这个一定要看

​在这个信息技术飞速发展的时代&#xff0c;传统的文件传输协议FTP已经逐渐显露出它的局限性。特别是在安全性、传输效率和可扩展性方面&#xff0c;FTP似乎已经无法满足企业日益增长的需求。因此&#xff0c;寻找一款能够替代FTP的国产信创软件&#xff0c;成为了众多企业的迫…

8个Web组件库强烈推荐,大厂设计师的秘密武器

有TDesign、Arco Design、Ant Design、Material 随着Design等优秀web组件库的发布&#xff0c;设计师可能会认为大厂商之间的web组件库差别不大。其实大厂商的产品线很多&#xff0c;业务复杂。设计系统是对以往项目经验的深刻沉淀&#xff0c;可以支撑业务逻辑&#xff0c;保证…

如何本地 Debug React 源码

日常开发过程中&#xff0c;有时 debug react 源代码进行问题排查。一种方案是直接把通过 html 引入进来&#xff0c;另外一种是编译并通过 yarn 链接到项目中&#xff0c;本地将介绍如何通过这两种方法进行代码 Debug。 页面引入源代码方式 这种方式比较简单&#xff0c;直接…

【项目】教你手把手完成博客系统(三)显示用户信息 | 实现退出登录 | 实现发布博客

文章目录 教你手把手完成博客系统&#xff08;三&#xff09;7.实现显示用户信息1.约定前后端交互接口2.前端通过ajax发起请求3.服务器处理请求 8.实现退出登录1.约定前后端的接口2.前端发起请求3.服务器处理请求 9.实现发布博客1.约定前后端的交互接口2.前端构造请求3.服务器处…

前端面试问题:子组件的某一个方法调用执行逻辑由父组件的属性状态变化来决定

面试官&#xff1a;请你讲讲你在该项目中遇到的问题是什么&#xff1f;你怎么解决这个问题&#xff1f; 答&#xff1a;我的回答&#xff1a;该项目的实现过程中我确实遇到了问题&#xff1a;【我会给大家整理回答思路和角度&#xff0c;那那么遇到这样的问题也可借鉴这种思路…

RAG架构的数据准备流程

虽然现成的大型语言模型 (LLM) 功能强大&#xff0c;但企业发现&#xff0c;根据其专有数据定制 LLM 可以释放更大的潜力。检索增强生成 (RAG) 已成为这种定制的主要方法之一。RAG 模型将大型语言模型强大的语言理解能力与检索组件相结合&#xff0c;使其能够从外部数据源收集相…

[Redis]String类型

基本命令 set命令 将 string 类型的 value 设置到 key 中。如果 key 之前存在&#xff0c;则覆盖&#xff0c;无论原来的数据类型是什么。之前关于此 key 的 TTL 也全部失效。 set key value [expiration EX seconds|PX milliseconds] [NX|XX] 选项[EX|PX] EX seconds⸺使用…

官宣!马斯克的xAI获60亿美元融资,估值240亿美元

5月27日晚&#xff0c;马斯克旗下的大模型平台xAI在官网宣布获得60亿美元B轮融资&#xff0c;估值240亿美元。本次主要投资者包括Valor Equity Partners、红杉资本、国王控股、沙特王子-Bin Talal、Vy Capital等。 这也是大模型赛道史上最高单笔融资之一&#xff0c;超过Anthr…

安全基础二

一、插件漏洞 统计使用了哪些插件这些插件有版本更新嘛检测这些插件是否存在已知漏洞 二、权限提升和持久化 SSRF&#xff08;Server-Side Request Forgery&#xff0c;服务器端请求伪造&#xff09; 想象一下&#xff0c;你是一个公司的内部员工&#xff08;服务器&#x…

主副坐标轴作图(即双坐标轴)

主副坐标轴显示&#xff1a; import numpy as np from matplotlib import pyplot as plt plt.rcParams[font.sans-serif][SimHei] plt.rcParams[axes.unicode_minus] False xnp.arange(0.1,10,0.01) data1np.exp(x) data2np.log(x) fig,ax1plt.subplots() #subplots一定要带s…

linux安装mysql后,配置mysql,并连接navicate软件

Xshell连接登陆服务器 输入全局命令 mysql -u root -p 回车后&#xff0c;输入密码&#xff0c;不显示输入的密码 注意mysql服务状态&#xff0c;是否运行等 修改配置文件my.cnf&#xff0c;这里没找到就找my.ini&#xff0c;指定有一个是对的 find / -name my.cnf 接下…

6岁开始学习打字,10岁学懂文字编程

​你们有没有想过打字速度会影响Coding 编程能力&#xff1f; 疫情期间&#xff0c;全国中小学均不定期停止面授课程&#xff0c;改为网上教学。顷刻之间&#xff0c;电脑、智能手机等即时通讯软件成为每日学习的「良师益友」&#xff0c;常伴左右。 同时&#xff0c;学生也由…

【管理咨询宝藏116】某大型国有集团公司战略落地保障方案

本报告首发于公号“管理咨询宝藏”&#xff0c;如需阅读完整版报告内容&#xff0c;请查阅公号“管理咨询宝藏”。 【管理咨询宝藏116】某大型国有集团公司战略落地保障方案 【格式】PDF版本 【关键词】战略落地、大型国企、战略报告 【核心观点】 - 资产规模以提高资产质量、…

C++入门 ros自定义msg话题通信

一、 开发环境 ubuntu20.04 ros版本noetic 参考视频 https://www.bilibili.com/video/BV1Ci4y1L7ZZ/?p52&spm_id_from333.1007.top_right_bar_window_history.content.click&vd_source4cd1b6f268e2a29a11bea5d2568836ee 二、 编写msg文件 在功能包下面创建msg文件夹…