C++基础(12)——STL(vector和deque)

news/2024/11/29 22:54:07/

前言

本文主要介绍C++中STL中的vector和deque容器

7.3:vector容器

7.3.1:vector容器基本概念、特点和构造函数

vector和数组的区别:数组是静态空间,一旦指定大小,之后就不能发生改变。vector可以动态扩展,当vector容器空间不够时,它不是在当前位置之后继续扩展,而是找一块更大的内存空间,将之前的数据拷贝一份过来,释放原来的空间。

vector常见构造函数(无参、通过另一个vector的区间、指定相同数据和个数、拷贝构造)

7.3.2:vector的赋值操作(operator=、assign)

7.3.3:vector容量和大小(empty、capacity、size、resize)

7.3.4:vector插入和删除(push_back、pop_back、insert、erase、clear)

insert(迭代器、ele)或者insert(迭代器、个数、ele)

erase除去vector中的元素

clear可以将容器清空

7.3.5:vector数据存取(at、operator[]、front、back)

7.3.6:vector互换容器(swap、使用匿名对象收缩内存)

基本操作

当一个容器的capacity很大时,但是size很小,这时就会浪费空间。使用匿名对象和当前vector对象进行交换,交换之后vector和匿名对象容器互换。匿名对象在当前行结束之后就会被系统回收,释放相关资源,这样也不会造成资源浪费。

7.3.7:vector预留空间(reserve)

reserve和resize的区别:

resize如果指定长度过大,多余的会默认补0,且可以访问;reserve(int len) 容器预留len个元素长度,预留位置不可初始化,且元素不可访问。

vector动态扩展次数统计:

计算vector动态扩展区间的次数,就是通过一个指针指向vector中第一个元素。当vector发生了动态扩展,那么vector会重新找一块更大的内存空间,将旧的空间重新释放掉。这时vector中第一个元素的地址就会发生变化,用一个cnt去记录变化的次数,这样就可以知道动态扩展了几次。

使用reserve进行提前预留空间的情况

提前使用reverse预留空间,代码执行的时间也会更短

7.4:deque

7.4.1:deque容器基本概念和构造函数

双端数组,可以对头端进行插入删除操作

deque和vector的区别

deque的内部原理,内部有一个中控器,中控器来控制每段缓冲区,让用户看起来数据是连续存储的

deque访问数据的时候会比较慢,因为访问完一段缓冲区数据之后,要通过中控器先找到下一段缓冲区的地址,然后再进行访问。vector存放的数据是连续的,访问的效率会更高。

使用模板函数打印deque,其中参数是模板类,构造函数的使用方式和vector一样

7.4.2:deque容器赋值操作(operator=、assign)

7.4.3:deque大小操作(empty、size、resize)

deque相较于vector没有capacity()成员方法

7.4.4:deque的插入和删除(push_back、pop_back、push_front、pop_front、insert、erase、clear)

7.4.5:deque的数据存取(at()、[]、front()、back())

7.4.6:deque容器的排序(sort,默认是升序)

调用sort对deque排序

调用sort对vector进行排序

总结

以上就是本文的全部内容,非常感谢你能看到这


http://www.ppmy.cn/news/487220.html

相关文章

第一次Bios系统升级经验坑分享

升级微星BioS: 微星官网-下载中心-主板(chipset)型号:B450I Gaming PLUS 犯的错误: 1.版本弄错:B450 ! B450I 下载版本错误,系统是无法识别到bios文件的,系统只能识别主板型号的文件…

Android 学习入门

Android学习笔记 问题来源问题解决 问题来源 在刚刚开始学习Android时,首先下载并且安装好Android studio,然后在创建项目,编写完成后想要运行一下,采用虚拟机运行,点击右上方小图标中的AVD Manager进行虚拟机设置&am…

亲测全套支付可用(微信支付宝)复制粘贴即可跑

亲测全套支付可用(微信支付宝包括退款)复制粘贴即可跑 /*** Auther: tjr* Date: 2020/9/30 15:11* Description: 支付宝后台接口*/ Slf4j RestController RequestMapping(value "/pay") Api(value"支付", tags"支付模块") public class PayCont…

台式机组装日志

目录 经验教训价格调研我的购买 经验教训 敲黑板,本次装机遇到一些问题,这是积累下来的知识点: 1、小心点,不要把CPU针脚搞弯了,搞弯一个都可能导致点不亮 2、硅胶不要粘到主板的孔上,如果粘了&#xff0…

华为POE交换机重置密码

console登录 然后重启ctrlb 缺省情况下,BootLoad菜单密码为Adminhuawei.com,从历史版本升级到新版本的设备,此密码可能为huawei https://support.huawei.com/hedex/hdx.do?docidEDOC1100126532&idZH-CN_TASK_0177100304&langzh 改…

最新-安装Windows与Ubuntu双系统

安装双系统 零.前言一.准备工作1.磁盘类型与引导类型2.制作启动盘①下载镜像与软碟通软件②.制作启动盘 3.系统设置①.分配内存②.安全模式③.设置bios模式 二.安装ubuntu三.设置Ubuntu1.启动项2.修改时间 四.继续处理Windows 零.前言 距离第一次写的安装已经过去了&#xff0…

尝试manjar20.03、fedora32、ubuntu20.04作为主力操作系统

编写日期:2020年7月23日19点09分 本篇为连载文章 修改日期:2020年8月3日星期一 9:44 首先manjaro是从搜索引擎上搜到友好的linux桌面发行版搜到的,之前就有想要放弃windows转向linux桌面版 曾经尝试过很多发行版(opensuse、centos…

html5 crosshair,嘿,纯正ROG血统 CROSSHAIR VIII IMPACT (开箱篇)最终版

本帖最后由 twfox 于 2019-9-8 14:56 编辑 C8I啊C8I纯正的ROG血统的ITX,虽然它并不是100%的完美,但是在M8I之后,ROG ITX断档如此之久的情况下,C8I的横空出世确实给我们带来了出乎意料的惊喜。 得ITX者得天下,ASUS把最大…