当前位置: 首页 > news >正文

C++ | 12天学好C++ (Day 10)->结构图可视化、代码加通俗理解

为每天进步一点点而努力。

C++是计算机视觉的重要的一部分,虽然在初始学习时Python应用比较广,但是大多数公司还是C++做计算机视觉类的比较多,因为C++可加密,所以我们来一起探索吧!看了这系列博客,将会学到C++的基本操作!(如果不敲代码,可能会一知半解)

第十天-221008

目录

第十天-221008

chapter 11 C++输入输出系统

11.1.cin,cout,cerr

11.2.ostream的成员函数

11.3.istream的成员函数

11.4.输入运算符<<和输出运算符>>

总结

参考文献


chapter 11 C++输入输出系统

数据以一系列字节形式(称为流)从 / 传输到输出/输入设备。输入流从输入设备(如键盘)流向主内存的操作

另一方面,输出行为是从主内存流向输出设备(如屏幕的流。

c++中定义的标准输入输出流是istream和ostream,他们是iostream类的父类,而cin是istream的对象,cout是ostream的对象。头文件fstream(对文件操作的流)包含了ifstream和ofstream,头文件sstream(对字符串操作的流)包含了istringstream和ostringstream,这些类都是继承自istream和ostream的。

它们的关系如下图【2】: 

- EOF: eof是end of file的缩写,表示“文件结束”。从输入流读取数据,如果到达文件末尾(遇文件结束符),eof函数值为非零值(真),否则为0(假)。

11.1.cin,cout,cerr

cin、cout、cerr 和堵塞是处理标准输入和输出的流。这些是在 iostream 头文件中定义的流对象。

std::cin 是类 istream 的一个对象,它表示面向窄字符(字符类型)的标准输入流。它对应于 C 流标准。标准输入流是由环境确定的字符源。cin 是所连接的输入设备的键盘。

std::cout 是类 ostream 的一个对象,它表示面向窄字符(字符类型)的标准输出流。它对应于 C 流标准。标准输出流是由环境确定的字符的默认目标。此目标可能与更多标准对象(如 cerr 或堵塞)共享。Cout 也称为运算符“ <<”,并将插入运算符信息或数据输出到输出设备。显示屏幕通常是连接 cout 对象的输出设备。

对象 cerr 控制与对象 stderr 关联的流缓冲区的输出,该缓冲区在 <cstdio> 中声明。它用于将错误输出到标准输出流。

注 −此标头中声明的所有对象都共享一个特殊属性 - 您可以假设它们是在您定义的任何静态对象之前构造的,在包含<iostream>的翻译单元中。同样,您可以假定在您定义的任何此类静态对象的析构函数之前不会销毁这些对象。(但是,输出流在程序终止期间将被刷新。因此,您可以在程序启动之前和程序终止后安全地读取或写入标准流。

您可以按如下方式使用这些流对象 −

#include<iostream>
int main() {
   int my_int;
   std::cin >> my_int;
   std::cout << my_int;
   std::cerr << "An error message";
   return 0;
}

输入11,结果为

 

11.2.ostream的成员函数

put()插入一个字符

write() 插入一字节序列

flush() 刷新输出流

#include<iostream>
/*  ostream & put(char ch)
    ostream & write(char*str,int n)
	ostteam & flush()
*/
int main() {
	std::cout.put('A') ;
	std::cout.put(33);//打印ASCII编码的33个符号->!

	char str[] = "I love u";
	std::cout.write(str, 6);//只能输出i love,说明空格占一位

	std::cout.flush();

	//想要去掉‘std::’,在第二行添加‘using namespace std’;就可以
}

结果

 

11.3.istream的成员函数

C++标准库里有针对外设输入操作进行处理的类——istream。而常用的cin则是istream的类对象。因此实际上我们可以重新定义新的输入流对象代替cin对输入进行操作。而我们常用的istream类成员函数有如下一些:

int get(): 从指定的输入流中读入一个字符(包括空白字符);遇到输入流中的文件结束符时,此get函数返回EOF;

istream&get(char&ch):从输入流读取一个字符(包括空白字符),并将其存储在字符变量 c 中。事实上get(char& c)与get( )作用基本相同;

#include<iostream>
using namespace std;
/* int get()
   istream & get(char&ch)
*/
void get1() {
	cout << "cin.get()input,use enter";
	int ch;
	while ((ch = cin.get()) != EOF) {
		cout.put(ch);
		if (ch == '\n')
			break;
	}
}
 void get2() {
	 cout << "cin.get(char&)input,use enter";
	 char ch;
	 while (true) {
		 cin.get(ch);
		 if (cin.eof())break;
		 cout.put(ch);
		 if (ch == '\n')
			 break;
	 }
 }


int main() {
	get1();
	get2();
	}

 

 istream&get(char* s,int n):从输入流读取一个字符(包括空白字符),并将其存储在字符变量 c 中。事实上get(char& c)与get( )作用基本相同;

 istream&get(char* s,int n,char delim='\n'):从输入流中读取n-1个字符,存于字符指针 s指向的内存。如果在读取n-1个字符之前遇到指定的终止字符delim,则提前结束读取。程序会自动在字符串最后增加一个’\0’表示结束;

 istream&getline(char* s,int n,char delim='\n'):提取一行的字符串,s 是存储数据的变量的名字,n为输入数据的长度,delim为结束的标志字符(遇到就结束,不理会数据有多长,可以不要)

istream&ignore(int n=1,int delim-EOF):忽略输入流中的n个字符,或者当遇到输入流中有一个值等于delim时停止忽略并返回。

int gcount(streamsize num = 1, int delim = EOF):istream的成员函数gcount()返回上一次输入操作实际从输入流读取的字符个数,streamsize gcount() const;

long setf(long flags):设置状态标志flags

long unsetf(long flags):删除状态标志flags

11.4.输入运算符<<和输出运算符>>

<<and运算符被>>重载以处理基本类型(例如intand double)和类(例如string)。您还可以为您自己的用户定义类型重载这些运算符。

cin <<andcout >>返回对 and 的引用,cin因此cout支持级联操作。

示例1

/* Testing Simple File IO (TestSimpleFileIO.cpp) */
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <string>
using namespace std;
 
int main() {
   string filename = "test.txt";
 
   // Write to File
   ofstream fout(filename.c_str());  // default mode is ios::out | ios::trunc
   if (!fout) {
      cerr << "error: open file for output failed!" << endl;
      abort();  // in <cstdlib> header
   }
   fout << "apple" << endl;
   fout << "orange" << endl;
   fout << "banana" << endl;
   fout.close();
 
   // Read from file
   ifstream fin(filename.c_str());  // default mode ios::in
   if (!fin) {
      cerr << "error: open file for input failed!" << endl;
      abort();
   }
   char ch;
   while (fin.get(ch)) {  // till end-of-file
      cout << ch;
   }
   fin.close();
   return 0;
}

结果

- 大多数<fstream>函数(例如构造函数open())仅支持 C 字符串中的文件名。可能需要通过成员函数从string对象中提取 C 字符串c_str()。

- is_open()用来检查文件是否打开成功。

- 该函数在到达文件末尾时get(char &)返回一个空指针(转换为)false。

总结

C++ 提供格式化未格式化的IO 函数。在格式化或高级 IO 中,字节被分组并转换为类型,例如intdouble, string 或用户定义的类型。在未格式化或低级 IO 中,字节被视为原始字节并且未转换。通过重载流插入 ( <<) 和流提取 ( >>) 运算符支持格式化 IO 操作,这提供了一致的公共 IO 接口。

要执行输入和输出,C++ 程序:

  • 构造一个流对象。
  • 将流对象连接(关联)到实际的 IO 设备(例如,键盘、控制台、文件、网络、另一个程序)。
  • 通过流的公共接口中定义的函数以与设备无关的方式对流执行输入/输出操作。一些函数在外部格式和内部格式之间转换数据(格式化的IO);而其他则没有(未格式化或二进制 IO)。
  • 断开(Dissociate)流与实际 IO 设备的连接(例如,关闭文件)。
  • 释放流对象。

参考文献

【1】What are cin, cout and cerr streams in C++? (tutorialspoint.com)

【2】C++中istream的使用_有点模糊的博客-CSDN博客_istream 

【3】 C++ IO Streams and File Input/Output

相关文章:

  • 十四、基于FPGA的SDI协议介绍(二)
  • 8 个精彩的免费 G​​IS 软件资源分享
  • 经典例题(二)——超经典例题的归纳总结
  • 云原生DevOps篇:使用Pipeline流水线将know-system项目自动化发版到Kubernetes集群
  • Flyweight(亨元模式)
  • 二手罗德与施瓦茨FSH4 FSH3手持频谱分析3.6GHz
  • 为什么C语言能长盛不衰?
  • 内网穿透,使开发者本地服务可让用户在非局域网内访问
  • 【PyTorch深度学习项目实战100例】—— 基于LSTM实现春联上联对下联 | 第14例
  • 毕业设计 基于51单片机的车辆防追尾系统 - 物联网 嵌入式
  • 【云原生】devops之jenkins中pipeline语法(1)
  • 工作几年,涨薪3K遭拒,后一天我就裸辞走了···
  • 国庆弯道超车正当时,推荐一个免费的刷题网站。。。Python小伙伴可以看过来了
  • 计算机网络:网络安全
  • 记一次MCMS的审计之路
  • 3.7、@ResponseBody 和 @RestController
  • es6(二):字符串的扩展
  • laravel with 查询列表限制条数
  • Laravel核心解读--Facades
  • leetcode98. Validate Binary Search Tree
  • vue 配置sass、scss全局变量
  • Vue 重置组件到初始状态
  • vue2.0一起在懵逼的海洋里越陷越深(四)
  • 从@property说起(二)当我们写下@property (nonatomic, weak) id obj时,我们究竟写了什么...
  • 电商搜索引擎的架构设计和性能优化
  • 解析 Webpack中import、require、按需加载的执行过程
  • 聚簇索引和非聚簇索引
  • 使用agvtool更改app version/build
  • 世界上最简单的无等待算法(getAndIncrement)
  • 算法-图和图算法
  • 腾讯优测优分享 | Android碎片化问题小结——关于闪光灯的那些事儿
  • 无服务器化是企业 IT 架构的未来吗?
  • 小程序滚动组件,左边导航栏与右边内容联动效果实现
  • 远离DoS攻击 Windows Server 2016发布DNS政策
  • 正则表达式
  • Java数据解析之JSON
  • # MySQL server 层和存储引擎层是怎么交互数据的?
  • (10)STL算法之搜索(二) 二分查找
  • (动手学习深度学习)第13章 计算机视觉---微调
  • (翻译)Entity Framework技巧系列之七 - Tip 26 – 28
  • (分布式缓存)Redis持久化
  • (附源码)spring boot网络空间安全实验教学示范中心网站 毕业设计 111454
  • (附源码)springboot青少年公共卫生教育平台 毕业设计 643214
  • ./configure、make、make install 命令
  • .NET 同步与异步 之 原子操作和自旋锁(Interlocked、SpinLock)(九)
  • .NET6 开发一个检查某些状态持续多长时间的类
  • .NET国产化改造探索(三)、银河麒麟安装.NET 8环境
  • @DependsOn:解析 Spring 中的依赖关系之艺术
  • @拔赤:Web前端开发十日谈
  • [ 蓝桥杯Web真题 ]-布局切换
  • [1]-基于图搜索的路径规划基础
  • [100天算法】-不同路径 III(day 73)
  • [20181219]script使用小技巧.txt
  • [CF]Codeforces Round #551 (Div. 2)
  • [dts]Device Tree机制