关于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;  
}

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

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

相关文章

C语言之枚举

系列文章目录 C语言之枚举 C语言之枚举 系列文章目录一、枚举概念二、定义三、优点四、示例应用 一、枚举概念 枚举&#xff08;Enumeration&#xff0c;简称Enum&#xff09;是一种编程语言中用于定义数值常量集合的数据类型。它为一组相关的常量提供了一个清晰、可读性强的命…

Java面试八股之多线程编程中什么是上下文切换

多线程编程中什么是上下文切换 上下文切换&#xff08;Context Switch&#xff09;是操作系统为了实现多线程或进程并发执行而采取的一种机制。在Java多线程环境中&#xff0c;上下文切换具体指的是CPU控制权从一个正在运行的线程转移到另一个就绪并等待CPU执行权的线程的过程…

5月30日在线研讨会 | 面向智能网联汽车的产教融合解决方案

随着智能网联汽车技术的快速发展&#xff0c;产业对高素质技术技能人才的需求日益增长。为了促进智能网联汽车行业的健康发展&#xff0c;推动教育链、人才链与产业链、创新链的深度融合&#xff0c;经纬恒润推出产教融合相关方案&#xff0c;旨在通过促进教育链与产业链的深度…

Qt | QTabBar 类(选项卡栏)

01、上节回顾 Qt | QStackedLayout 类(分组布局或栈布局)、QStackedWidget02、简介 1、QTabBar类直接继承自 QWidget。该类提供了一个选项卡栏,该类仅提供了一个选项卡, 并没有为每个选项卡提供相应的页面,因此要使选项卡栏实际可用,需要自行为每个选项卡设置需要显示的页…

怎么使用Stable diffusion中的models

Stable diffusion中的models Stable diffusion model也可以叫做checkpoint model&#xff0c;是预先训练好的Stable diffusion权重&#xff0c;用于生成特定风格的图像。模型生成的图像类型取决于训练图像。 如果训练数据中从未出现过猫的图像&#xff0c;模型就无法生成猫的…

C++

定义自己的命名空间my_sapce&#xff0c;在my_sapce中定义string类型的变量s1&#xff0c;再定义一个函数完成对字符串的逆置。

DQL(数据查询)

目录 1. DQL概念 2. DQL - 编写顺序 3. 基础查询 3.1 查询多个字段 3.2 字段设置别名 3.3 去除重复记录 3.4 案例 4. 条件查询 4.1 语法 4.2 条件 4.3 案例&#xff1a; 5. 聚合函数 5.1 常见的聚合函数&#xff1a; 5.2 语法 5.3 案例&#xff1a; 6. 分组查…

winform安装时覆盖原版本并保留配置文件

如何打包参考大佬的博客添加链接描述 覆盖原版本 修改 Properties 下的 AssemblyInfo.cs 中的版本号&#xff0c;如下。原来是1.0.0.0&#xff0c;我修改成1.0.2。 选中 Setup 项目&#xff0c;修改 Version 属性修改 Version 属性后 ProductCode 也会改变&#xff0c;卸载程…

生信网络学院|05月31日《SOLIDWORKS Manage 产品周期管理》

课程主题&#xff1a;SOLIDWORKS Manage 产品周期管理 课程时间&#xff1a;2024年05月31日 14:00-14:30 主讲人&#xff1a;付舰 生信科技 PLM实施顾问 1、SOLIDWORKS Manage介绍 2、周期流程管理 3、产品项目管理 4、项目会议管理 5、项目问题管理 安装腾讯会议客户端…

社会工程学:美色你顶得住吗?

背景 近年来&#xff0c;网络钓鱼的手段是屡见不鲜&#xff0c;手段和方式也是层出不穷。钓鱼相关的技术作为一种比较高效的打点方式&#xff0c;越来越多的应用于红蓝对抗当中。本文主要分享一次实战攻防中几个有趣的钓鱼场景。 重点说明&#xff1a;本文分享内容为一次经过授…

雷电预警监控系统:守护安全的重要防线

TH-LD1在自然界中&#xff0c;雷电是一种常见而强大的自然现象。它既有震撼人心的壮观景象&#xff0c;又潜藏着巨大的安全风险。为了有效应对雷电带来的威胁&#xff0c;雷电预警监控系统应运而生&#xff0c;成为现代社会中不可或缺的安全防护工具。 雷电预警监控系统的基本…

效果炸裂!使用 GPT-4o 快速实现LLM OS

使用 GPT-4o 快速实现LLM OS 什么是 LLM OS&#xff1f;LLM OS 主要有以下5个部分组成&#xff1a; LLM OS 开源实现运行 LLM OS 开源实现 什么是 LLM OS&#xff1f; 关于 LLM OS 的最初构想源自karpathy 在2023年11月11日发布的一条Twitter 动态&#xff0c;这是 LLM OS 概念…

大连瓦房店市科工局副局长乔宽一行调研蓝卓

日前&#xff0c;瓦房店市科技和工业信息化局副局长乔宽、副局长国海军、轴承协会秘书长高钧一行莅临蓝卓调研&#xff0c;学习浙江数字经济发展路径&#xff0c;考察蓝卓数字化服务能力。蓝卓副总经理陈挺、装备汽配军团总监陈伟亮、数字化咨询总监周立斌、大连区域方案经理龚…

精通C++ STL(二):string类的模拟实现

目录 string类各函数接口总览 默认成员函数 构造函数 拷贝构造函数 赋值运算符重载函数 析构函数 迭代器相关函数 begin和end 容量和大小相关函数 size和capacity reserve和resize empty 修改字符串相关函数 push_back append operator insert erase clear swap c_str 访…

The Sandbox 和 Bitkub 联手增强东南亚元宇宙中心

作为去中心化游戏虚拟世界和区块链平台的先驱&#xff0c;The Sandbox 正与泰国领先的区块链网络 Bitkub Blockchain Technology Co., Ltd. 展开创新合作。双方合作的目的是将Bitkub元宇宙的影响力扩展到The Sandbox&#xff0c;建立一个元宇宙中心&#xff0c;向用户承诺从 Bi…

SuperMap GIS基础产品FAQ集锦(20240527)

一、SuperMap iDesktopX 问题1&#xff1a;请教一下&#xff0c;idesktopx对三维点设置svg符号&#xff0c;场景中不显示是什么原因&#xff1f; 11.1.1 【解决办法】目前三维场景暂时不支持svg矢量符号&#xff0c;可使用栅格符号替代。 问题2&#xff1a;请教一下&#x…

【NumPy】权威指南:使用NumPy的percentile函数进行百分位数计算

&#x1f9d1; 博主简介&#xff1a;阿里巴巴嵌入式技术专家&#xff0c;深耕嵌入式人工智能领域&#xff0c;具备多年的嵌入式硬件产品研发管理经验。 &#x1f4d2; 博客介绍&#xff1a;分享嵌入式开发领域的相关知识、经验、思考和感悟&#xff0c;欢迎关注。提供嵌入式方向…

3-Django项目继续--初识ModelForm

目录 ModelForm 认识ModelForm 优势 初识Form 初识ModelForm 添加信息 views.py add_student_new.html 修改信息 views.py views.py add_student_new.html ModelForm 认识ModelForm 优势 1、方便校验用户提交的数据 2、页面展示错误提示 3、数据库字段很多的情况…

企业文件加密实现数据泄露防护

在数字化时代&#xff0c;数据成为企业最宝贵的资产之一。然而&#xff0c;数据泄露事件频发&#xff0c;给企业带来了巨大的经济损失和声誉风险。为了保护企业的核心利益&#xff0c;实现数据泄露防护&#xff0c;企业必须采取有效的文件加密措施。 一、数据泄露的严重性 数据…

SQL——SELECT相关的题目(力扣难度等级:简单)

目录 197、上升的温度 577、员工奖金 586、订单最多的客户 596、超过5名学生的课 610、判断三角形 620、有趣的电影 181、超过经理收入的员工 1179、重新格式化部门表&#xff08;行转列&#xff09; 1280、学生参加各科测试的次数 1965、丢失信息的雇员 1068、产品销售分…