【C++】vector 的常用接口

news2024/11/16 8:55:38

目录

一、vector是什么❓

二、vector的使用

1、构造函数

2、修改数据

⭕️size

⭕️capacity

⭕️empty

⭕️clear

⭕️resize(重要)

⭕️reserve(重要)

​3、遍历数据

⭕️operator[ ] (重要)

⭕️vector iterator

​⭕️范围 for

4、增删查改

⭕️push_back

⭕️pop_back

 ⭕️find

⭕️insert

⭕️erase

⭕️swap


一、vector是什么❓

【vector的文本介绍】

⭕️vector是表示可变大小数组的序列容器。
⭕️就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问,和数组一样高效。但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容器自动处理。
⭕️本质讲,vector使用动态分配数组来存储它的元素。当新元素插入时候,这个数组需要被重新分配大小为了增加存储空间。其做法是,分配一个新的数组,然后将全部元素移到这个数组。就时间而言,这是一个相对代价高的任务,因为每当一个新的元素加入到容器的时候,vector并不会每次都重新分配大小。
⭕️vector分配空间策略:vector会分配一些额外的空间以适应可能的增长,因为存储空间比实际需要的存储空间更大。不同的库采用不同的策略权衡空间的使用和重新分配。但是无论如何,重新分配都应该是对数增长的间隔大小,以至于在末尾插入一个元素的时候是在常数时间的复杂度完成的。
⭕️ 因此,vector占用了更多的存储空间,为了获得管理存储空间的能力,并且以一种有效的方式动态增长。
⭕️与其它动态序列容器相比(deque, list and forward_list),vector在访问元素的时候更加高效,在末尾添加和删除元素相对高效。对于其它不在末尾的删除和插入操作,效率更低。比起list和forward_list统一的迭代器和引用更好。

二、vector的使用

vector 学习时一定要学会查看文档【vector】,vector在实际操作中非常重要,在实际中我们熟悉常见的接口就可以。在学习了string类之后,vector也是同样的学习方法。

👉️vector 的使用模板

构造一个 vector,根据所使用的构造函数版本初始化其内容。 

1、构造函数

⭕️vector()

功能:构造空的 vector 类对象,即储存空元素。默认构造,不用传参。但是需要规定元素的类型。

⭕️vector(size_type n, const value_type& val = value_type())

 功能:构造并初始化 n 个 val。

⭕️vector (const vector& x); (重点)

功能:拷贝构造

⭕️ vector (InputIterator first, InputIterator last)

功能:使用迭代器进行初始化构造

2、修改数据

⭕️size

功能:获取 vector 的数据个数

【vector::size】

⭕️capacity

功能:获取 vector 的容量大小

【vector::capacity】

⭕️empty

功能:判断是否为空。size=0是true,否则是false;

【vector::empty】

⭕️clear

功能:清除所有数据,将 size 改为0,不改变 capacity。

【vector::clear】

⭕️resize(重要)

功能:改变 vector 的 size,可以进行初始化。【vector::resize】

将原来 size 大小调整为 n 。
如果n小于当前 size,则将当前值缩短到前n个字符,删除第n个字符以外的字符。
如果n大于当前 size,则通过在末尾插入尽可能多的字符来扩展当前内容,以达到n的大小。如果指定了c,则新元素被初始化为c的副本,否则,它们是值初始化的字符(空字符)。

⭕️reserve(重要)

功能:改变 vector 的 capacity。【vector::reserve】

将 vector 的 capacity 改为n;

如果n小于当前 capacity ,不会发生改变,capacity不变。
如果n大于当前 capacity,将 capacity 扩大为n(或者更大)。

🌟注意:

capacity的代码在vs和g++下分别运行会发现,vs下capacity是按1.5倍增长的,g++是按2倍增长的。这个问题经常会考察,不要固化的认为,vector增容都是2倍,具体增长多少是根据具体的需求定义的。vs是PJ版本STL,g++是SGI版本STL。
reserve只负责开辟空间,如果确定知道需要用多少空间,reserve可以缓解vector增容的代价缺陷问题。如果已经确定vector中要存储元素大概个数,可以提前将空间设置足够,就可以避免边插入边扩容导致效率低下的问题了


3、遍历数据

⭕️operator[ ] (重要)

 功能:像数组一样访问 【operator[ ]】

⭕️vector iterator


 1️⃣begin+end

 功能:正向迭代器,获取第一个数据位置的iterator/const_iterator, 获取最后一个数据的下一个位置的iterator/const_iterator

2️⃣rbegin+rend

功能:反向迭代器,获取最后一个数据位置的reverse_iterator,获取第一个数据前一个位置的 reverse_iterator

 ⭕️范围 for

 

4、增删查改

⭕️push_back

功能:在 vector 的末尾,在其当前最后一个元素之后添加一个新元素。val 的内容被复制(或移动)到新元素,size会加1;【push_back】

⭕️pop_back

 功能:删除最后一个元素,size-1,capacity不变;【pop_back】

 ⭕️find

功能:查找。【find】

⭕️insert

功能:在 position 之前插入 val。【insert】

⭕️erase

功能:删除 position 位置的数据【erase】

⭕️swap

功能:交换两个 vector 的数据空间。【swap】

总结:本文只是提供了 vector 的一部分常用接口,不需要完全记住,在实际用过程中勤查文档即可。而且 vector 和 string 类有很多共通之处,可以结合起来一起理解。

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

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

相关文章

MCU 串口接收环形缓冲区的实现

环形缓冲区 1. 环形缓冲区的特性 1.先进先出 2. 当缓冲区被使用完,且又有新的数据需要存储时,丢掉历史最久的数据,保存最新的数据 现实中的存储介质都是线性的,因此我们需要做一下处理,才能在功能上实现环形缓冲区 …

MSMFN

CDFI是彩色多普勒血流成像 辅助信息 作者未提供数据

【C++那些事儿】深入理解C++类与对象:从概念到实践(中)| 默认构造函数 | 拷贝构造函数 | 析构函数 | 运算符重载 | const成员函数

📷 江池俊: 个人主页 🔥个人专栏: ✅数据结构冒险记 ✅C那些事儿 🌅 有航道的人,再渺小也不会迷途。 文章目录 1. 类的6个默认成员函数2. 构造函数2.1 概念2.2 特性 3. 析构函数3.1 概念3.2 特性 4. 拷贝…

SpringMVC 学习(十一)之数据校验

目录 1 数据校验介绍 2 普通校验 3 分组校验 4 参考文档 1 数据校验介绍 在实际的项目中,一般会有两种校验数据的方式:客户端校验和服务端校验 客户端校验:这种校验一般是在前端页面使用 JS 代码进行校验,主要是验证输入数据…

计算机二级Python刷题笔记------基本操作题23、33、35、37(考察字符串)

文章目录 第二十三题(字符串替换:replace(old,new))第三十三题(字符串遍历)第三十五题(字符串与列表)第三十七题(拼接字符串) 第二十三题(字符串替换&#xf…

Qt开发 显示类控件

Label QLabel 可以用来显示文本和图片 核心属性如下 属性说明textQLabel 中的文本textFormat文本的格式:Qt::PlainText 纯文本Qt::RichText 富文本(支持 html 标签)Qt::MarkdownText markdown 格式Qt::AutoText 根据文本内容自动决定文本格式.pixmapQLabel 内部包…

模拟器抓HTTP/S的包时如何绕过单向证书校验(XP框架)

模拟器抓HTTP/S的包时如何绕过单向证书校验(XP框架) 逍遥模拟器无法激活XP框架来绕过单向的证书校验,如下图: ​​ 解决办法: 安装JustMePlush.apk安装Just Trust Me.apk安装RE管理器.apk安装Xposedinstaller_逍遥64位…

FRM模型十三:互换定价(二)

定义一个互换,本金为1e7,7年后到期 固定端:利率2.5%,每年付息一次 浮动端:Libor6M,每半年付息一次 import QuantLib as ql from prettytable import PrettyTable# 定义全局时间:当前日期,下一个结算日&…

Redis小白入门教程

Redis入门教程 1. Redis入门1.1 Redis简介1.2 Redis服务启动与停止1.2.1 Redis下载1.2.2 服务启动命令1.2.3 客户端连接命令1.2.4 修改Redis配置文件 2. Redis数据类型2.1 五种常用数据类型介绍2.1.1 字符串操作命令2.1.2 哈希操作命令2.1.3 列表操作命令2.1.4 集合操作命令2.1…

Java | Java中与文件同名的类的构造函数的调用

在Java的学习过程中遇到了这样一段代码: public class Test1 {int a1;public static void main(String []args){System.out.println("java");}public Test1(){System.out.println("构造函数");} }它的运行结果是这样的,构造函数中的…

进程与线程:通过实际生活来解析计算机的基本运作单位

进程与线程 进程与线程:详细解析计算机的基本运作单位1. 进程:独立的执行环境1.1 进程的特点: 2. 线程:轻量级的执行单元2.1 线程的特点: 3. 区别和联系4. 表格 进程与线程:详细解析计算机的基本运作单位 在…

win10安全中心误删文件怎么办?解析恢复与预防策略

在使用Windows 10的过程中,许多用户依赖于其内置的安全中心来保护电脑免受恶意软件的侵害。然而,有时安全中心的误判可能导致重要文件被错误地删除。当面对这种情况时,了解如何恢复误删的文件并掌握预防措施显得尤为重要。本文将为您详细解析…

LabVIEW高精度天线自动测试系统

LabVIEW高精度天线自动测试系统 系统是一个集成了LabVIEW软件的自动化天线测试平台,提高天线性能测试的精度与效率。系统通过远程控制测试仪表,实现了数据采集、方向图绘制、参数计算等功能,特别适用于对天线辐射特性的精确测量。 在天线的…

【C++】类的默认成员函数(上)

🔥博客主页: 小羊失眠啦. 🎥系列专栏:《C语言》 《数据结构》 《C》 《Linux》 《Cpolar》 ❤️感谢大家点赞👍收藏⭐评论✍️ 文章目录 一、默认成员函数二、构造函数构造函数的概念及特性 三、析构函数析构函数的特性…

介绍平衡准确率(Balance Accuracy)和加权 F1 值(Weighted F1)

🍉 CSDN 叶庭云:https://yetingyun.blog.csdn.net/ 先复习一下查准率、召回率和 F1 分数: 查准率是对预测结果而言,每个类别模型预测正确的比例。 召回率是对样本标签而言,每个类别中有多少被预测正确了。 F1 分数是…

电机的极数和槽数,机械角度和电角度,霍尔IC,内外转子

什么是电机的极数和槽数? 【第7集】② 正弦波驱动的转矩脉动、正弦电流的时序和相位变化、超前角控制(超前角调整)、正弦波驱动的各种波形 - 电源设计电子电路基础电源技术信息网站_罗姆电源设计R课堂 (rohm.com.cn) 下面为您介绍表示电机…

算法【线性表的查找-折半查找/二分查找/对分查找】

线性表的查找-折半查找/二分查找/对分查找 折半查找概念查找过程折半查找算法: (非递归算法) 折半查找法的性能分析性能分析:平均查找长度ASL: 复杂度折半查找法的特点: 折半查找概念 折半查找,也称为二分查找,是一种…

【JS】解构赋值注意点,解构赋值报错

报错代码 const 小明 { email: 6, pwd: 66 } const 小刚 { email: 9, pwd: 99 }const { email } 小明 const { email } 小刚 报错图 原因 2个常量重复,重复在同一个作用域内是不能重复的,例如大括号内{const a 1; const a 2} 小伙伴A提问 问&…

从头构建gpt2 基于Transformer

从头构建gpt2 基于Transformer VX关注{晓理紫|小李子},获取技术推送信息,如感兴趣,请转发给有需要的同学,谢谢支持!! 如果你感觉对你有所帮助,请关注我。 源码获取 VX关注晓理紫并回复“chatgpt…

Unreal触屏和鼠标控制旋转冲突问题

Unreal触屏和鼠标控制旋转冲突问题 鼠标控制摄像机旋转添加Input轴计算旋转角度通过轴事件控制旋转 问题和原因问题原因 解决办法增加触摸控制旋转代码触屏操作下屏蔽鼠标轴响应事件 鼠标控制摄像机旋转 通过Mouse X和Mouse Y控制摄像机旋转。 添加Input轴 计算旋转角度 通过…