C++程序设计-第九/十一/十二章 模板/输入/输出流/标准模板库【期末复习|考研复习】

news/2024/7/27 7:28:53/文章来源:https://blog.csdn.net/qq_45400167/article/details/136595695

前言

总结整理不易,希望大家点赞收藏。

给大家整理了一下C++程序设计中的重点概念,以供大家期末复习和考研复习的时候使用。


C++程序设计系列文章传送门:
第一章 面向对象基础
第四/五章 函数和类和对象
第六/七/八章 运算符重载/包含与继承/虚函数和多态性
第九/十一/十二章 模板/输入/输出流/标准模板库
C++程序设计-练手题集合


文章目录

  • 前言
  • 第九章 模板
    • 9.1 模板有什么特点?什么时候使用?
    • 9.2 定义模板参数时使用typename与使用class有什么区别吗
  • 第十一章 输入/输出流
  • 第十二章 标准模板库
    • 12.1 读取存放string对象的list容器可以使用什么迭代器类型
    • 12.2 为什么不可以使用容器来存储iostream对象
    • 12.3 C++标准库为vector对象提供的内存分配策略是什么
    • 12.4 说明容器vector、deque和list有什么区别
  • 总结


第九章 模板

9.1 模板有什么特点?什么时候使用?

泛型性:模板是一种泛型编程技术,它可以让我们编写与数据类型无关的代码,实现一次编写、多次使用的目的。
灵活性:模板提供了灵活的参数化方式,可以在不同的上下文中使用不同的数据类型,同时也可以使用不同的算法和数据结构。
可重用性:模板可以用于定义通用的类和函数,可以适用于不同的数据类型和算法,从而实现代码的重用。
高效性:模板编译时生成代码,不会引入额外的运行时开销,因此模板可以产生高效的代码。
适用情况:
当需要编写可以适用于多种数据类型的算法或数据结构时,可以使用模板来实现泛型编程。
当需要编写通用的库或框架时,可以使用模板来实现通用性和可重用性。
当需要实现类型安全的代码时,可以使用模板来进行参数化,并在编译期间进行类型检查。
当需要实现高效的代码时,可以使用模板来生成高效的代码,并避免运行时的开销。

9.2 定义模板参数时使用typename与使用class有什么区别吗

使用 typename 或 class 来定义模板参数是等价的,只是语法上略有不同,可以根据个人习惯来选择。在模板参数列表中使用 typename 更符合直觉,因为模板参数往往代表一个类型,而不是一个类。
template
class MyClass {};

第十一章 输入/输出流

cin>>输入操作符会丢弃前导空白读取数据 遇到空白时停止读入
要输入空白采用cin.get()
oct 八进制 hex 十六进制 dec 十进制

第十二章 标准模板库

12.1 读取存放string对象的list容器可以使用什么迭代器类型

采用正向迭代器和双向迭代器。

std::list<std::string> my_list {"hello", "world", "!"};
for (auto it = my_list.begin(); it != my_list.end(); ++it) {std::cout << *it << " ";
}// 输出:hello world !
for (auto it = my_list.rbegin(); it != my_list.rend(); ++it) {std::cout << *it << " ";
}// 输出:! world hello

其中,正向迭代器和双向迭代器都是const迭代器的子类,因此也可以用于读取list中的元素。

12.2 为什么不可以使用容器来存储iostream对象

因为容器元素类型必须支持赋值操作及复制,而iostream类型不支持赋值和复制。

12.3 C++标准库为vector对象提供的内存分配策略是什么

C++标准库为vector对象提供了一种动态数组的实现,使用连续的内存来存储元素,而内存的分配由allocator完成。vector对象的内存分配策略可以概括为以下几个步骤:
vector对象的内存空间在创建时是空的,只有在添加元素时才会动态分配内存。
当vector对象需要增加元素时,首先会检查当前的内存空间是否足够,如果不够,则会向操作系统请求更多的内存。vector使用一个大小为N的缓冲区来存储元素,当缓冲区已满时,会重新分配一个更大的缓冲区。
重新分配缓冲区的大小通常是当前缓冲区的两倍,这个策略可以有效减少内存分配的次数,提高vector的性能。重新分配缓冲区后,会将原来缓冲区中的元素复制到新的缓冲区中。
如果vector对象的元素数量减少,而剩余的内存空间较多,则可以通过调用vector的shrink_to_fit()函数来释放多余的内存空间,减少内存占用。

12.4 说明容器vector、deque和list有什么区别

内部实现方式:
vector是一个动态数组,使用连续的内存来存储元素;deque是一个双端队列,使用多个连续的缓冲区来存储元素;list是一个双向链表,每个元素都存储指向前后元素的指针。
访问元素的效率:
vector和deque都可以通过下标访问元素,时间复杂度为O(1);而list只能通过迭代器访问元素,时间复杂度为O(n),其中n是元素数量。因此,在需要随机访问元素时,vector和deque比list更高效。
插入和删除元素的效率:
在vector中插入或删除元素时,需要将后面的元素依次移动或者复制,时间复杂度为O(n);而在deque和list中插入或删除元素时,只需要调整前后元素的指针,时间复杂度为O(1)。但是,在deque中插入或删除元素时,需要重新分配缓冲区,可能会导致内存复制的开销。
内存分配和使用效率:
vector和deque都使用动态分配的内存,可以自动调整内存空间大小以适应元素数量的变化;而list使用指针来链接元素,不需要连续的内存空间,但是每个元素需要单独分配内存,可能会造成内存碎片。

总结

C++系列已经更新完毕,预祝大家超常发挥!

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

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

相关文章

2.案例、鼠标时间类型、事件对象参数

案例 注册事件 <!-- //disabled默认情况用户不能点击 --><input type"button" value"我已阅读用户协议(5)" disabled><script>// 分析&#xff1a;// 1.修改标签中的文字内容// 2.定时器// 3.修改标签的disabled属性// 4.清除定时器// …

ElasticSearch 学习(docker,传统方式安装、安装遇到的问题解决,)

目录 简介 什么是ElasticSearch 安装 传统方式安装 开启远程访问 Docker方式安装 Kibana 简介 安装 传统方式安装 Docker方式安装 compose方式安装 简介 什么是ElasticSearch ElasticSearch 简称 ES &#xff0c;是基于Apache Lucene构建的开源搜索引擎&#xff0c…

Parade Series - WebRTC ( < 300 ms Low Latency ) T.B.D

Parade Series - FFMPEG (Stable X64) 延时测试秒表计时器 ini/config.ini [system] homeserver storestore\nvr.db versionV20240312001 verbosefalse [monitor] listrtsp00,rtsp01,rtsp02 timeout30000 [rtsp00] typelocal deviceSurface Camera Front schemartsp ip127…

图像处理与图像分析—图像统计特性的计算(纯C语言实现灰度值显示)

根据输入的灰度图像&#xff0c;分别计算图像的均值、方差等统计特征&#xff0c;并计算图像的直方图特征并以图形方式显示图像的直方图&#xff08;用C或C语言实现&#xff09;。 学习将会依据教材图像处理与图像分析基础&#xff08;C/C&#xff09;版内容展开 在上个笔记中&…

HTTP/2的三大改进:头部压缩、多路复用和服务器推送

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

Midjourney绘图欣赏系列【人物篇】(一)

Midjourney介绍 Midjourney 是生成式人工智能的一个很好的例子&#xff0c;它根据文本提示创建图像。它与 Dall-E 和 Stable Diffusion 一起成为最流行的 AI 艺术创作工具之一。与竞争对手不同&#xff0c;Midjourney 是自筹资金且闭源的&#xff0c;因此确切了解其幕后内容尚不…

微信小程序一次性订阅requestSubscribeMessage授权和操作详解

一次性订阅&#xff1a;用户订阅一次发一次通知 一、授权 — requestSubscribeMessage Taro.requestSubscribeMessage({tmplIds: [], // 需要订阅的消息模板的id的集合success (res) {console.log("同意授权", res)},fail(res) {console.log(拒绝授权, res)}})点击或…

Java爬虫-获取数据的方式之一

目录 一、jsoup的使用 1.概述 2.主要功能 3.快速入门 4.数据准备 二、Selenium 1.概述 2.使用 三、Selenium配合jsoup获取数据 四、爬虫准则 五、Seleniumjsoupmybatis实现数据保存 1.筛选需要的数据 2.创建一个表&#xff0c;准备存储数据 手写&#xff1f;不存在…

el-Upload 上传组件,on-success方法response返回值为空

前言 家人们谁懂啊&#xff0c;我最近在用el-upload组件做上传用户的头像的功能&#xff0c;用的是它自带的action方法自动上传&#xff0c;它不是有个on-success方法吗&#xff0c;是个回调函数&#xff0c;上传成功后会返回三个参数&#xff0c;response&#xff08;是一个表…

使用Barrier共享鼠标键盘,通过macos控制ubuntu系统

之前文章写过如何使用barrrier通过windows系统控制ubuntu系统&#xff0c;该文章将详细介绍如何使用barrier通过macos系统控制ubuntu系统 一、macOS安装barrier macOS版本barrier链接 1、双击点开安装包 2、将安装包里的barrier拷贝到macOS的达达->应用程序中 3、在达达…

[QT]自定义的QtabWidget

需求 最近有一个需求就是一个QTabWidget要求有四个tab页在左侧用于显示主页面&#xff0c;在右侧有一个关于按钮&#xff0c;点击后用于弹出窗口显示一些程序相关信息。主要是怎么实现右侧按钮 相关代码 #ifndef MYTABWIDGET_H #define MYTABWIDGET_H#include <QWidget&g…

元宇宙崛起:区块链与金融科技共绘数字新世界

文章目录 一、引言二、元宇宙与区块链的深度融合三、区块链在元宇宙金融中的应用四、金融科技在元宇宙中的创新应用五、面临的挑战与机遇《区块链与金融科技》亮点内容简介获取方式 一、引言 随着科技的飞速发展&#xff0c;元宇宙概念逐渐走进人们的视野&#xff0c;成为数字…

手机备忘录可以设置密码吗 能锁屏加密的备忘录

在繁忙的生活中&#xff0c;手机备忘录成了我随身携带的“小秘书”。那些关于工作的灵感、生活的琐事&#xff0c;甚至深藏心底的小秘密&#xff0c;都被我一一记录在里面。然而&#xff0c;每次当手机离开我的视线&#xff0c;或者需要借给他人使用时&#xff0c;我总会心生担…

贝叶斯优化的门控循环神经网络BO-GRU(时序预测)的Matlab实现

贝叶斯优化的门控循环神经网络&#xff08;BO-GRU&#xff09;是一种结合了贝叶斯优化&#xff08;Bayesian Optimization, BO&#xff09;和门控循环单元&#xff08;Gated Recurrent Unit, GRU&#xff09;的模型&#xff0c;旨在进行时序预测。这种模型特别适用于时间序列数…

HTML 学习笔记(七)列表

html中的列表分为以下三种&#xff1a;有序列表&#xff0c;无序列表和自定义列表 1.有序列表 有序列表由两个元素组成&#xff1a;元素ol和元素li&#xff0c;此两个元素是父子关系&#xff0c;li必须包裹在ol里使用&#xff0c; ol里直接嵌套的只有li&#xff0c;其嵌套效果…

SpringBoot配置达梦数据库依赖(达梦8)

maven配置 <!-- 达梦数据库 --><dependency><groupId>com.dameng</groupId><artifactId>DmJdbcDriver18</artifactId><version>8.1.1.193</version></dependency><dependency><groupId>com.alibaba&l…

Day33:安全开发-JavaEE应用SQL预编译Filter过滤器Listener监听器访问控制

目录 JavaEE-预编译-SQL JavaEE-过滤器-Filter JavaEE-监听器-Listen 思维导图 Java知识点 功能&#xff1a;数据库操作&#xff0c;文件操作&#xff0c;序列化数据&#xff0c;身份验证&#xff0c;框架开发&#xff0c;第三方库使用等. 框架库&#xff1a;MyBatis&#…

Era Network在web3行业的价值

近年来,以比特币和以太坊为代表的区块链技术快速发展,去中心化、信任机制的创新概念也越来越受到广泛关注。AI人工智能与区块链技术在互联网应用领域的落地,正在引领互联网进入价值互联的新阶段web3.0时代&#xff01; 新行业发展的价值与优先级 WEB3行业发展的核心需求是&…

N3-Chitosan N3 叠氮修饰壳聚糖 改性叠氮 CS-Azide

碳水科技&#xff08;Tanshtech&#xff09;可以提供壳聚糖衍生物 1.壳聚糖的各种改性(NH2/COOH/SH/N3/MAL-Chitosan等) 2.各种靶向小分子修饰壳聚糖&#xff08;Biotin/FA/cRGD-Chitosan等&#xff09; 3.各种荧光标记壳聚糖(FITC/RB/CY-Chitosan等) 4.壳聚糖和各种聚合物…

机器学习的基础学习笔记

黑马的学习视频 大家常说的人工智能、机器学习、深度学习其实是包含关系&#xff0c;深度学习是机器学习的一种特殊方法&#xff0c;而机器学习又是人工智能的一个子领域。 其中机器学习是使计算机系统能够通过学习经验和数据来改进性能。机器学习算法能够从数据中发现模式&am…