关于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.mzph.cn/news/842994.shtml

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

相关文章

怎么使用Stable diffusion中的models

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

面试八-存泄漏是什么,有哪几种,怎么解决?

一、内存泄漏几种情况 当使用基类指针指向派生类对象时&#xff0c;如果基类的析构函数不是虚函数&#xff0c;那么在使用基类指针来删除这个对象时&#xff0c;只会调用基类的析构函数&#xff0c;而不会调用派生类的析构函数。这就导致了派生类中的资源无法正确释放&#xff…

22公司斩获亚洲品牌经济峰会“亚洲数字化服务领军企业奖”

5月25日&#xff0c;以“亚洲新势力&#xff1a;创新、融合与可持续发展”为主题的亚洲品牌经济峰会2024深圳会议在深圳益田威斯汀酒店举办&#xff0c;本次活动由中国亚洲经济发展协会指导&#xff0c;由亚洲国际品牌研究院主办&#xff0c;旨在搭建品牌创新与经济发展交流平台…

B站pink老师CSS学习(一)

文章目录 一、CSS基础选择器1.标签选择器2.类选择器3. id选择器4.通配符选择器 二、字体属性1.字体2.字体大小3.字体粗细4.文字样式5.复合属性 三、文本属性1.文本颜色2.对齐文本3.装饰文本4.文本缩进5.行间距 四、CSS引入方式1. 内部样式表2.行内样式表3.外部样式表 一、CSS基…

CTF流量分析之wireshark使用

01.基本介绍 在CTF比赛中&#xff0c;对于流量包的分析取证是一种十分重要的题型。通常这类题目都是会提供一个包含流量数据的pcap文件&#xff0c;参赛选手通过该文件筛选和过滤其中无关的流量信息&#xff0c;根据关键流量信息找出flag或者相关线索。 pcap流量包的分析通常…

响应式页面布局处理-一篇打尽

纯pc端响应式 pc端平常用到的响应式布局 大致就如下三种&#xff0c;当然也会有其他方法&#xff0c;欢迎评论区补充 将div height、width设置成100% flex布局 flex布局主要是将flex-wrap: wrap&#xff0c; 最后&#xff0c;你可以通过给子元素设置 flex 属性来控制它们的…

布隆过滤器-详解及使用

一、什么是布隆过滤器 1、简介 布隆过滤器是一个很长的二进制向量和一系列随机映射函数。可以用于检索一个元素是否在一个集合中。。理解为SET集合。 布隆过滤器其内部维护了一个全为 0 的 bit 数组&#xff0c;需要说明的是&#xff0c;布隆过滤器有一个误判的概念&#xf…

如何搭建雾锁王国多人联机服务器,搭建教程分享

雾锁王国&#xff08;Enshrouded&#xff09;是一款融合了生存、制作以及动作RPG战斗的游戏&#xff0c;2024年1月24日在Steam平台以抢先体验形式发售&#xff0c;支持中文。游戏背景设定在一个基于体素构筑的辽阔大陆上。玩家将在这个开放世界中自由选择前进的方向&#xff0c…

机器视觉HALCON:3.图像获取,运算,率噪,滤波(边缘),锐化

目录 图像获取生成单通道图像图像运算加法运算减法运算乘法运算除法 仿射变换图像平滑&#xff08;噪点处理&#xff09;高斯滤波均值滤波中值滤波多图像均值 边缘滤波索贝尔滤波凯尼滤波 图像锐化索贝尔锐化拉普拉斯锐化高通滤波锐化几种锐化方式对比 图像获取 用到的函数&…

8个最佳实践,助你打造成功的短剧平台开发团队

当涉及到跨境电商平台开发&#xff0c;成功的团队至关重要。在这篇文章中&#xff0c;我将分享8个最佳实践&#xff0c;助你打造成功的短剧平台开发团队。无论是经验丰富的团队还是初创企业&#xff0c;这些实践都能为你的团队带来价值&#xff0c;提高开发效率&#xff0c;确保…

lua 计算第几周

需求 计算当前赛季的开始和结束日期&#xff0c;2024年1月1日周一是第1周的开始&#xff0c;每两周是一个赛季。 lua代码 没有处理时区问题 local const 24 * 60 * 60 --一整天的时间戳 local server_time 1716595200--todo:修改服务器时间 local date os.date("*t…

快速复制成功模式:解读SaaS裂变工具的核心价值

在数字化快速发展的今天&#xff0c;企业如何在竞争激烈的市场中迅速站稳脚跟&#xff0c;成为许多企业家和管理者关注的焦点。SaaS裂变工具作为一种创新的解决方案&#xff0c;以其独特的优势&#xff0c;帮助企业快速复制成功模式&#xff0c;实现业务的快速增长。 SaaS裂变工…

Mysql 单行转多行,把逗号分隔的字段拆分成多行

一、拆分前后的数据 二、执行SQL select substring_index(substring_index(a.gzlx,,,b.help_topic_id1),,,-1) gzlxname, a.gzlx,a.* from dt_task_zxgz_info a join mysql.help_topic b on b.help_topic_id < (length(a.gzlx) - length(replace(a.gzlx,,,))1) 三、解释说…

cobalt strike基础测试

下载链接4.3&#xff1a;https://pan.baidu.com/s/1E_0t30tFWRiE5aJ7F-ZDPg 链接4.0&#xff1a;https://pan.baidu.com/s/1SkMmDem3l6bePqIDgUz2mA 提取码&#xff1a;burp 一、简介&#xff1a; cobalt strike(简称CS)是一款团队作战渗透测试神器&#xff0c;分为客户端…

使用大模型LLM实现销售AI

想象一个场景&#xff0c;客户通过聊天窗口咨询一款产品。销售AI首先使用LLM解析客户的问题&#xff0c;然后通过智能代理查询数据库获取产品详细信息&#xff0c;并以自然而友好的方式回应客户。 在对话过程中&#xff0c;AI可以评估客户的兴趣&#xff0c;并主动提供促销信息…

905. 按奇偶排序数组 - 力扣

1. 题目 给你一个整数数组 nums&#xff0c;将 nums 中的的所有偶数元素移动到数组的前面&#xff0c;后跟所有奇数元素。 返回满足此条件的 任一数组 作为答案。 2. 示例 3. 分析 开辟一个数组res用来保存操作过后的元素。第一次遍历数组只插入偶数&#xff0c;第二次遍历数组…

查分小程序怎么用?

在教育信息化的浪潮中&#xff0c;一种新型的成绩管理工具成绩发布小程序&#xff0c;正逐渐成为教师的得力助手。简化了成绩发布流程&#xff0c;还提高了信息的安全性和便捷性。 查分小程序的使用方法非常直观。只需在威信中搜索并打开易查分小程序&#xff0c;教师按照提示注…

IP协议说明

文章目录 前言一、IP协议的简介二、IP数据报1.IP 数据报结构2.IP 数据报的分片解析3.IP 数据报的分片重装 三、IP 数据报的输出四、IP 数据报的输入 前言 IP 指网际互连协议&#xff0c; Internet Protocol 的缩写&#xff0c;是 TCP/IP 体系中的网络层协议。设计 IP 的目的是…

SQL数据分析常用函数

SQL 中有许多常用的函数&#xff0c;可以用于处理和操作数据。以下是一些常见的SQL 函数&#xff1a; 1. 字符串函数&#xff1a; CONCAT(str1, str2, …): 用于把多个文本字符串合并成一个长字符串(参数中有null时返回null)。 select concat(一起,学, SQL); -- 输出结果:一…

RPC 框架

RPC 全称 Remote Procedure Call——远程过程调用。 RPC技术简单说就是为了解决远程调用服务的一种技术&#xff0c;使得调用者像调用本地服务一样方便透明。RPC是一种通过网络从远程计算机程序上请求服务&#xff0c;不需要了解底层网络技术的协议。 集群和分布式 集群&…