对流对象的理解

在c++里,“流”可以理解为数据传输与操作的“介质”。

从输入输出角度来看,有输入流(比如cin)和输出流(cout)。对于输入流,数据通过它从外部设备(例如键盘)“流入”程序内部;对于输出流,程序内部的数据通过它“流向”外部设备(例如显示器)。也就是说,我们可以将“流”理解为数据的“介质”或者“载体”。

还有例如fstream相关的文件流。它能让程序与文件之间进行数据的读写,数据在程序与文件之间的流动,就是借助于流对象这个载体。而且流具有状态。

输入流与输出流,实际上是两个类istream和ostream。这两个类具有自己的成员函数。既然如此,我们要进行输入输出的时候,就不一定非得用cin与cout了,我们可以自定义istream和ostream对象,比如定义一个istream对象叫input,定义一个ostream对象叫output,那么input>>和cin>>,output<<和cout<<的效果是一样的。只不过,cin和cout已经和标准的输入输出设备(键盘和显示器)关联好了。

再来说文件流。当我们想要向计算机中的文件写入内容(或者导出其中的内容),我们就不能仅仅定义一个普通的输入流对象,因为我们的重点是要向文件内部写入数据,而不是向程序写入数据。但是,这本质上还是在解决输入输出的问题,只不过解决的是针对计算机内部的文件进行输入或输出的问题。

在C++中使用文件流,需要包含fstream头文件,它包含ifstream(用于从文件中读取数据)与ofstream(用于向文件写入数据)和fstream(既能读又能写)这几个类。

比如要向文件中写入数据,使用ofstream类,示例如下:

#include <iostream>
#include <fstream>
using namespace std;int main() 
{ofstream outFile("example.txt");//构造函数,将文件与程序连接起来if (outFile.is_open()) //成员函数,用来判断文件是否打开{outFile << "这是要写入文件的内容" << endl;outFile.close();//成员函数,用来关闭文件} else {cout << "无法打开文件" << endl;}return 0;
}

从文件读取数据则使用ifstream类,示例如下:
 

#include <iostream>
#include <fstream>
#include <string>
using namespace std;int main() {ifstream inFile("example.txt");if (inFile.is_open()) {string line;while (getline(inFile, line)) {cout << line << endl;}inFile.close();} else {cout << "无法打开文件" << endl;}return 0;
}

这里我们剖析一下getline().getline()的功能是逐行读取文件中的内容,将其读入字符串line中。为什么要使用while循环?是因为字符串只能在一个维度延伸,所以只能读取一行。所以每读入一行,就要输出line的内容。但是这样的话,每次进入while循环中,不应该先清空line中的内容吗?

事实上,每次getline函数执行时,会直接覆盖line原有的内容。比如第一次getline把第一行内容读入line,下一次getline执行时,就直接把第一行的内容覆盖掉了。就好比数组中将某个区间内的元素往后移动,直接覆盖。此外,getline函数每次调用时会从指定的流对象(这里是inFile)中读取一行数据到string类型的变量(这里是line)中,并且会自动忽略换行符。当到达文件末尾时,getline函数会返回false.而且,getline还可以指定分隔符:getline(istream&is,string&str,char ch);这个重载版本会读到指定的分隔符ch为止,而不是默认的换行符。

再提问:getline(istream&is,string& str)与getline(ifstream&is,string& str)有区别吗?

实际上,ifstream是从istream派生而来的。这意味着所有ifstream对象都可以当作istream对象来使用。所以是没有区别的。如果是普通的istream对象,我们就可以在控制台中输入内容,然后我们输入的内容就会被写入我们指定的字符串当中。如果是ifstream对象,我们就可以将文件中的内容提取出来到指定的字符串中。前者是“写+读”,后者是“读”。这么设计的好处是,getline函数不仅能从文件中读取数据,还能从标准输入读取数据,将控制台输入的内容读入字符串。这种多态性使得代码更加灵活和可复用。虽然cin更多涉及用户输入(写+读),ifstream侧重从文件读,但本质上都是从输入流中获取数据。统一使用istream&参数,getline函数可以无缝适配不同类型的输入源。

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

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

相关文章

Visium HD多样本拼片拆分

Visium HD实验的时候一个捕获区域内可以包含多个样本拼片&#xff08;例如多个组织切片或不同样本的排列&#xff09;是常见的实验设计&#xff0c;多样本拼片能够提升实验效率&#xff0c;单张玻片处理多个样本&#xff0c;降低试剂和测序成本&#xff0c;后续分析的时候只需要…

进程(Process)详解

进程&#xff08;Process&#xff09;详解 一、基本定义 ‌概念‌ 进程是计算机中程序的一次动态执行实例&#xff0c;包含程序代码、数据及运行状态&#xff0c;是操作系统进行资源分配和调度的基本单位‌。与静态的“程序”不同&#xff0c;进程是动态实体&#xff0c;随程…

毕业论文超清pdf带标签导出

Word直接导出的pdf不够清晰&#xff0c;使用打印导出的pdf又不带书签以及目录跳转功能这一问题&#xff0c;查阅网上资料使用Adobe DC似乎能够解决但是下载安装比较麻烦&#xff0c;于是写了python程序解决该问题。 解决思路&#xff1a; 使用python脚本对两个pdf文件进行合并…

NOIP2012提高组.同余方程

目录 题目算法标签: 数论, 扩展欧几里得算法思路代码 题目 203. 同余方程 算法标签: 数论, 扩展欧几里得算法 思路 简单的扩展欧几里得算法应用题, 扩展欧几里得算法可以直接计算同余方程的通解, 因为求得是最小正整数解, 因此需要取模转换为正整数 a x b y ≡ 1 ax by …

C++学习-入门到精通-【0】计算机和C++简介

C学习-入门到精通-[0]计算机和C简介 计算机和C简介 C学习-入门到精通-[0]计算机和C简介一、计算机的组成二、硬件和软件三、数据的层次结构四、机器语言、汇编语言和高级语言五、C标准库六、面向对象技术 一、计算机的组成 计算机是由多个不同功能的逻辑单元组成的&#xff1a…

macOS 系统设置息屏情况下,PHP等后台脚本继续执行

在 macOS 系统下&#xff0c;当屏幕息屏或合上盖子时&#xff0c;后台脚本程序是否会继续运行&#xff0c;主要取决于以下几个因素&#xff1a; 1. 系统睡眠状态的影响 默认情况&#xff1a;合盖/息屏后&#xff0c;Mac 会进入「睡眠模式」&#xff08;部分硬件休眠&#xff…

SpringBoot集成ActiveMQ异常处理机制:若未捕获异常,消息会被重新投递

一、问题描述 SpringBoot项目集成AvtiveMQ&#xff0c;作为消息消费者。如果在消费消息的方法中&#xff0c;抛出异常&#xff0c;会产生什么效果&#xff1f; 二、ActiveMQ异常处理机制&#xff08;AI问答仅供参考&#xff09; 在Spring Boot项目集成ActiveMQ作为消息消费者…

【Java学习笔记】random的使用

random使用方法 使用说明&#xff1a;返回的是(0<n<1)这个范围中的任意带正号的double值 代码实例 public class helloworld{public static void main(String[] args){System.out.println(Math.random());} }生成0-100中的任意数代码示例 public class Main {public …

(三)垂直分库架构、分布式数据库

文章目录 垂直分库架构/分布式数据库什么是垂直分库架构架构模型优缺点优点缺点 技术案例分布式数据库架构模型优缺点优点缺点 技术案例 垂直分库架构/分布式数据库 什么是垂直分库架构 根据业务的模块划分&#xff0c; 将不同业务的数据放到不同的数据库中。 比如一个电子商城…

数据结构线性表的顺序存储结构

线性表是由零个或多个数据元素组成的有序序列。 特点&#xff1a; 数据元素间是有顺序的&#xff1b; 数据元素的个数是有限的&#xff1b; 一般来说&#xff0c;数据元素的类型是相同的&#xff08;强类型语言&#xff09;。c/c是强类型语言&#xff0c;必须指定数据类型。…

扣子空间试用:生成五一骑行规划+notion文章编写

今天试用了一下扣子空间&#xff0c;正好五一快到了&#xff0c;让它帮忙做了五一骑行规划&#xff0c;效果不赖&#xff01; 生成五一骑行规划 点击前往网站查看效果 prompt 如下&#xff1a; 帮我做一个五一上海骑行规划 要求&#xff1a; - 风景优美 - 人少 - 100km总路程…

最新得物小程序sign签名加密,请求参数解密,响应数据解密逆向分析

点击精选&#xff0c;出现https://app.dewu.com/api/v1/h5/index/fire/index 这个请求 直接搜索sign的话不容易定位 直接搜newAdvForH5就一个&#xff0c;进去再搜sign&#xff0c;打上断点 可以看到t.params就是没有sign的请求参数&#xff0c; 经过Object(a.default)该函数…

在C#串口通信中,一发一收的场景,如何处理不同功能码的帧数据比较合理,代码结构好

在 C# 串口通信的一发一收场景里&#xff0c;处理不同功能码的帧数据可采用以下合理的代码结构&#xff0c;它能让代码更具可读性、可维护性和可扩展性。 实现思路 定义帧结构&#xff1a;创建一个类来表示通信帧&#xff0c;其中包含功能码、数据等信息。功能码处理逻辑&…

【C++】vector扩容缩容

vector扩容缩容 1 扩容 一般来说&#xff0c;主要是重新分配内存 2 缩容 resize 缩小后&#xff0c;vector 的容量&#xff08;capacity()&#xff09;可能保持不变&#xff0c;需要显式调用 shrink_to_fit() 来释放内存。 验证代码&#xff1a; #include <vector>…

java中,线程的执行状态有哪些

在 Java 里&#xff0c;线程有 6 种执行状态&#xff0c;这些状态都在 java.lang.Thread.State 枚举类中被定义。下面为你详细介绍这些状态&#xff1a; 1. NEW&#xff08;新建状态&#xff09; 当你创建了一个 Thread 对象&#xff0c;却还未调用其 start() 方法时&#xf…

MATLAB 控制系统设计与仿真 - 41

鲁棒控制的其他函数 - 回路成型函数 loopsyn 灵敏度问题由鲁棒控制工具箱中的loopsyn就可以直接求解,该函数采用H无穷回路成型算法设计控制器,函数的调用格式为: [K,CL,gamma,info] = loopsyn(G,Gd) % G为受控对象模型% Gd为期望的回路传递函数% K为回路成型控制器模型% C…

查询Hologres或postgresql中的数据

因Hologres使用postgresql的语法.所以两者查询一样. 方案1: import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.util.ArrayList; import java.util.List;/*** 一个使用简单连接池管理PostgreSQL连接的工具类。*/ publi…

OpenBayes 一周速览|EasyControl 高效控制 DiT 架构,助力吉卜力风图像一键生成;TripoSG 单图秒变高保真 3D 模型

公共资源速递 10 个教程&#xff1a; * 一键部署 R1-OneVision * UNO&#xff1a;通用定制化图像生成 * TripoSG&#xff1a;单图秒变高保真 3D * 使用 VASP 进行机器学习力场训练 * InfiniteYou 高保真图像生成 Demo * VenusFactory 蛋白质工程设计平台 * Qwen2.5-0mni…

中兴云电脑W102D_晶晨S905X2_2+16G_mt7661无线_安卓9.0_线刷固件包

中兴云电脑W102D_晶晨S905X2_216G_mt7661无线_安卓9.0_线刷固件包 准备工作&#xff1a; 工具和设备在开始刷机之前&#xff0c;确保你已经准备好以下物品&#xff1a;双公头USB线&#xff1a;选择一根30-50厘米长的USB线&#xff0c;长度适中&#xff0c;方便操作&#xff0c;…

Rust 学习笔记:安装 Rust

Rust 学习笔记&#xff1a;安装 Rust Rust 学习笔记&#xff1a;安装 Rust在 Windows 上安装 Rust命令行创建 Rust 项目在 Mac/Linux 上安装 Rust一些命令升级卸载cargo -hrustc -h 安装 RustRoverrust-analyzer Rust 学习笔记&#xff1a;安装 Rust 在 Windows 上安装 Rust …