cpp的vector类

本篇将讲述vector类中的各种重要和常用函数(begin()、end()、rbegin()、rend()cbegin()、cend() 、crbegin()、crend()、size()、resize()、capacity()、reserve()、empty()、push_back ()、pop_back()、insert()、erase()、clear()。)

所有函数使用时应当包含头文件<vector>。

如果对您有帮助还请多多点赞,要是文章有错误地方还请你在评论区留言指正。                       

一、vector的创建

1. 空容器构造函数(默认构造函数)

作用: 构造一个没有元素的空容器。

用法:

vector <int> v;

2.填充构造函数

作用:构造一个包含 n 个元素的容器。每个元素都是 val 的副本。 

用法:

vector <int> v(5,0);

3.范围构造函数

作用: 构造一个容器,其中包含与范围 [first,last] 一样多的元素,每个元素都按相同的顺序从该区域中的相应元素构造。

用法:

	vector<int> v2(v1.begin(), v1.end());

 4.复制构造函数

作用:以相同的顺序构造一个容器,其中包含 x 中每个元素的副本。

用法:

	vector<int>v1(4, 0);vector<int> v2(v1);

二、迭代器

1.begin()

作用:返回指向向量中第一个元素的迭代器。

用法:

vector<int>v = {1,2,3,4,5,6};
vector<int>::iterator it = v.begin();

2.end()

作用:返回一个迭代器,该迭代器引用向量容器中的 past-the-end 元素。

用法:

vector<int>v = {1,2,3,4,5,6};
vector<int>::iterator it = v.begin();
while (it != v.end())
{cout << *it << ' ';it++;
}

3.rbegin()和rend()

 作用:与上述begin()和end()反过来

rbegin():返回一个反向迭代器,该迭代器指向向量中的最后一个元素(即其反向开头)。

rend():返回一个反向迭代器,该迭代器指向向量中第一个元素之前的理论元素(被视为其反向端)。

用法:

vector<int>v = {1,2,3,4,5,6};
vector<int>::reverse_iterator it = v.rbegin();
while (it != v.rend())
{cout << *it << ' ';it++;
}

4.cbegin()、cend() 、crbegin()、crend() 

作用:功能上与上述4个函数类似,只是不能改变其指向。

三、容量

1.size()

作用:返回向量中的元素数。

用法:

	size_t i = v.size();

2.resize()

作用: 调整容器的大小,使其包含 n 个元素。如果 n 小于当前容器大小,则内容将减少到其前 n 个元素,删除超出此部分的元素(并销毁它们)。如果 n 大于当前容器大小,则通过在末尾插入所需数量的元素来扩展内容,以达到 n 的大小。如果指定了 val ,则新元素将初始化为 val 的副本,否则,它们将进行值初始化。

用法:

	vector<int>v1 = { 1,2,3,4,5,6 };vector<int>v2 = { 1,2,3,4,5,6 };vector<int>v3 = { 1,2,3,4,5,6 };v1.resize(4);v2.resize(10);v3.resize(10,3);

3.capacity()

作用: 返回当前为vector分配的存储空间的大小,以元素表示。此容量不一定等于向量的大小。它可以相等或更大,额外的空间允许容纳生长,而无需在每次插入时重新分配。请注意,此容量不假设对向量的大小有限制。当此容量耗尽并需要更多容量时,容器会自动扩展它(重新分配其存储空间)。

用法:

	size_t i = v.capacity();

 4.reserve()

作用: 

请求向量容量至少足以包含 n 个元素。
如果 n 大于当前向量容量,则该函数会导致容器重新分配其存储,将其容量增加到 n(或更大)。
在所有其他情况下,函数调用不会导致重新分配,并且​​​​​​​向量容量不受影响。
此函数对容量大小没有影响,也无法更改其元素。

用法:

	v.reserve(10);

5.empty()

作用:返回向量是否为空(即其大小是否为 0)。此函数不会以任何方式修改容器。 如果容器大小为 0,则为 true,否则为 false。

用法:

	vector<int>v;cout << v.empty() << endl;

四、修饰符

1.push_back ()

作用:在向量尾部插入一个元素val。 

用法:

	vector<int>v = { 1,2,3,4,5,6 };v.push_back(0);

2.pop_back()

 

作用: 删除向量中的最后一个元素,从而有效地将容器大小减小 1。这将销毁已删除的元素。

用法:

	vector<int>v = { 1,2,3,4,5,6 };v.pop_back();

3.insert()

作用:通过在指定位置的元素之前插入新元素来扩展向量,从而有效地增加容器大小(增加插入的元素数)。当且仅当新向量大小超过当前向量容量时,这会导致自动重新分配分配的存储空间。 

用法:

	vector<int>v = { 1,2,3,4,5,6 };std::vector<int>::iterator it = v.begin() + 2;v.insert(it, 0);

 

4erase()

作用:从向量中删除单个元素 (位置) 或一系列元素 ([first,last))。这实际上通过删除的元素数(被销毁)来减小容器大小。 

用法:

	vector<int>v = { 1,2,3,4,5,6 };std::vector<int>::iterator it = v.begin() + 2;v.erase(it, v.end());

5.clear()

作用:从向量中删除所有元素(已销毁),使容器的大小为 0。 

用法:

	v.clear();

 

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

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

相关文章

Vuejs设计与实现 — 渲染器核心:挂载与更新

前言 挂载 与 更新 是 渲染器 的核心功能&#xff0c;也是渲染器应该要提供的基本功能&#xff0c;而 挂载 和 更新 又是基于 VNode 虚拟节点的&#xff0c;因为 VNode 节点描述了其对应的 真实 DOM 应该是什么样子的。 挂载与卸载 VNode 节点 无论是 vue 还是 react 都引入…

k8s 综合项目笔记

综述 这篇笔记主要是为了记录下自己写 k8s 综合项目的过程。 由于自己之前已经写过简单的开发和运维项目&#xff0c;所以这里就结合一下&#xff0c;在搭建 k8s 集群后安装运维常用服务&#xff0c;比如 ansible 和 prometheus&#xff0c;用 NFS 实现数据存储同步&#xff0c…

鸿蒙中富文本编辑与展示

富文本在鸿蒙系统如何展示和编辑的&#xff1f;在文章开头我们提出这个疑问&#xff0c;带着疑问来阅读这篇文章。 富文本用途可以展示图文混排的内容&#xff0c;在日常App 中非常常见&#xff0c;比如微博的发布与展示&#xff0c;朋友圈的发布与展示&#xff0c;都在使用富文…

LeetCode_231. 2 的幂_java

1、题目 231. 2 的幂https://leetcode.cn/problems/power-of-two/ 给你一个整数 n&#xff0c;请你判断该整数是否是 2 的幂次方。如果是&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 如果存在一个整数 x 使得 n &#xff0c;则认为 n 是 2 的幂次方…

ComfyUI初体验

ComfyUI 我就不过多介绍了&#xff0c;安装和基础使用可以看下面大佬的视频&#xff0c;感觉自己靠图文描述的效果不一定好&#xff0c;大家看视频比较方便。 ComfyUI全球爆红&#xff0c;AI绘画进入“工作流时代”&#xff1f;做最好懂的Comfy UI入门教程&#xff1a;Stable D…

ArcGIS001:ArcGIS10.2安装教程

摘要&#xff1a;本文详细介绍arcgis10.2的安装、破解、汉化过程。 一、软件下载 安装包链接&#xff1a;https://pan.baidu.com/s/1T3UJ7t_ELZ73TH2wGOcfpg?pwd08zk 提取码&#xff1a;08zk 二、安装NET Framework 3.5 双击打开控制面板&#xff0c;点击【卸载程序】&…

dbt-codegen: dbt自动生成模板代码

dbt项目采用工程化思维&#xff0c;数据模型分层实现&#xff0c;支持描述模型文档和测试&#xff0c;非常适合大型数据工程项目。但也需要用户编写大量yaml描述文件&#xff0c;这个过程非常容易出错且无聊。主要表现&#xff1a; 手工为dbt模型编写yaml文件&#xff0c;这过…

STM32传感器模块编程实践(十一) ADC模数转换模块ADS1115简介及驱动源码

文章目录 一.概要二.ADS1115芯片介绍三.ADS1115芯片主要特性四.ADS1115模块接线说明五.ADS1115参考原理图六.通讯协议介绍七.STM32单片机与ADS1115模块实现电压采集实验1.硬件准备2.软件工程3.软件主要代码4.实验效果 八.源代码工程下载九.小结 一.概要 ADC&#xff0c;全称为…

认识和使用 Vite 环境变量配置,优化定制化开发体验

Vite 官方中文文档&#xff1a;https://cn.vitejs.dev/ 环境变量 Vite 内置的环境变量如下&#xff1a; {"MODE": "development", // 应用的运行环境"BASE_URL": "/", // 部署应用时使用的 URL 前缀"PROD": false, //应用…

JavaScript完整笔记

JS引入 JavaScript 程序不能独立运行&#xff0c;它需要被嵌入 HTML 中&#xff0c;然后浏览器才能执行 JavaScript 代码。 通过 script 标签将 JavaScript 代码引入到 HTML 中&#xff0c;有两种方式&#xff1a; 内部方式 通过 script 标签包裹 JavaScript 代码 我们将 &…

使用FRP搭建内网穿透服务(新版toml配置文件,搭配反向代理方便内网网站访问)【使用frp搭建内网穿透】

FRP&#xff08;Fast Reverse Proxy&#xff09;是一个高性能的反向代理应用程序&#xff0c;主要用于内网穿透。它允许用户将内部网络服务暴露到外部网络&#xff0c;适用于 NAT 或防火墙环境下的服务访问。 他是一个开源的 服务 如果大家不想用 花生壳 软件&#xff0c;可以尝…

卷积神经网络评价指标

1.评价指标的作用 1. 性能评估&#xff1a;评价指标提供了一种量化的方式来衡量CNN模型的性能。通过这些指标&#xff0c;我们可以了解模型在特定任务上的表现&#xff0c;比如图像分类、目标检测或图像分割等。 2. 模型比较&#xff1a;不同的模型架构或训练策略可能会产生不…

基于SSM考研助手系统的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;学生管理&#xff0c;教学秘书管理&#xff0c;考研资讯管理&#xff0c;考研名师管理&#xff0c;考研信息管理&#xff0c;系统管理 教学秘书账号功能包括&#xff1a;系统首页&#xff0c;个人中心…

如何快速解决游戏提示系统中的emp.dll缺失问题

emp.dll是一个动态链接库&#xff08;Dynamic Link Library, DLL&#xff09;文件&#xff0c;这类文件在Windows操作系统中扮演着至关重要的角色。它们包含了可由多个程序同时使用的代码和数据&#xff0c;其主要目的是实现模块化&#xff0c;以便于程序的更新和动态链接。emp…

es实现自动补全

目录 自动补全 拼音分词器 安装拼音分词器 第一步&#xff1a;下载zip包&#xff0c;并解压缩 第二步&#xff1a;去docker找到es-plugins数据卷挂载的位置&#xff0c;并进入这个目录 第三步&#xff1a;把拼音分词器的安装包拖到这个目录下 第四步&#xff1a;重启es 第…

RV1126音视频学习(二)-----VI模块

文章目录 前言2.RV1126的视频输入vi模块2.1什么是VI模块2.3RV1126VI模块主要APIRK_MPI_SYS_Init()RK_MPI_VI_SetChnAttrRK_MPI_VI_EnableChnRK_S32 RK_MPI_VI_DisableChnRK_MPI_VI_StartStreamRK_MPI_SYS_GetMediaBufferRK_MPI_MB_GetPtrRK_MPI_MB_GetSizeRK_MPI_MB_ReleaseBuf…

【NOIP提高组】加分二叉树

【NOIP提高组】加分二叉树 &#x1f490;The Begin&#x1f490;点点关注&#xff0c;收藏不迷路&#x1f490; 设一个n个节点的二叉树tree的中序遍历为&#xff08;l,2,3,…,n&#xff09;&#xff0c;其中数字1,2,3,…,n为节点编号。每个节点都有一个分数&#xff08;均为正整…

读《认知觉醒》:浅谈费曼技巧

最近在阅读《认知觉醒》这本书&#xff0c;封面如下&#xff1a; 读到了里面对于费曼技巧的介绍&#xff08;在第八章&#xff09;&#xff0c;感觉受到了一些启发&#xff0c;在这里分享给大家。 其实之前很早就接触过了费曼技巧&#xff0c;但是并没有很好的应用起来&#x…

零代码快速开发智能体 |甘肃旅游通

零代码快速开发智能体 &#xff5c;甘肃旅游通 本文仅用于文心智能体的活动征文 参与人&#xff1a;mengbei_admin 文心智能体平台是人工智能领域的佼佼者。它拥有强大的语言理解与生成能力&#xff0c;能精准回应各种问题&#xff0c;出色完成文本创作、知识问答和翻译等任…

线性表之双向链表

链表花里胡哨&#xff0c;一应俱全 前言 在这之前&#xff0c;我们已经学习了单链表。我们发现这些链表都是一个接一个朝一个方向接下去&#xff0c;有时&#xff0c;我们想要查找某个结点的时候还得从头开始遍历查找&#xff0c;尽管我们已经学习了顺序表&#xff0c;查找某个…