当前位置: 首页 > 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的审计之路
  • [rust! #004] [译] Rust 的内置 Traits, 使用场景, 方式, 和原因
  • 《微软的软件测试之道》成书始末、出版宣告、补充致谢名单及相关信息
  • 【391天】每日项目总结系列128(2018.03.03)
  • magento2项目上线注意事项
  • nginx 负载服务器优化
  • nginx 配置多 域名 + 多 https
  • NLPIR语义挖掘平台推动行业大数据应用服务
  • PyCharm搭建GO开发环境(GO语言学习第1课)
  • spring security oauth2 password授权模式
  • supervisor 永不挂掉的进程 安装以及使用
  • text-decoration与color属性
  • underscore源码剖析之整体架构
  • unity如何实现一个固定宽度的orthagraphic相机
  • 阿里云容器服务区块链解决方案全新升级 支持Hyperledger Fabric v1.1
  • 从零开始的无人驾驶 1
  • 大整数乘法-表格法
  • 欢迎参加第二届中国游戏开发者大会
  • 开源地图数据可视化库——mapnik
  • 前端面试之闭包
  • 如何将自己的网站分享到QQ空间,微信,微博等等
  • 问题之ssh中Host key verification failed的解决
  • 限制Java线程池运行线程以及等待线程数量的策略
  • k8s使用glusterfs实现动态持久化存储
  • 格斗健身潮牌24KiCK获近千万Pre-A轮融资,用户留存高达9个月 ...
  • 关于Android全面屏虚拟导航栏的适配总结
  • 好程序员web前端教程分享CSS不同元素margin的计算 ...
  • ​一帧图像的Android之旅 :应用的首个绘制请求
  • #gStore-weekly | gStore最新版本1.0之三角形计数函数的使用
  • #Linux(权限管理)
  • (1)无线电失控保护(二)
  • (23)Linux的软硬连接
  • (4)(4.6) Triducer
  • (Java数据结构)ArrayList
  • (附源码)spring boot智能服药提醒app 毕业设计 102151
  • (附源码)springboot家庭财务分析系统 毕业设计641323
  • (附源码)计算机毕业设计ssm-Java网名推荐系统
  • (六)c52学习之旅-独立按键
  • (算法二)滑动窗口
  • (学习日记)2024.01.19
  • (已解决)什么是vue导航守卫