C/C++ vector详解
要想了解STL,就必须会看:
cplusplus.com
https://legacy.cplusplus.com/
官方内容全都是英文的,可以参考:
C/C++初始识
https://blog.csdn.net/2301_77087344/article/details/138596294?spm=1001.2014.3001.5501
vector:向量,顺序表,是一个类模板,顺序容器
vector类常用的函数如下:
1.构造函数
- vector()://创建一个空vector
- vector(int nSize)://创建一个vector,元素个数为nSize
- vector(int nSize,const t& t)://创建一个vector ,元素个数为nSize,且值均为t
- vector(const vector&)://赋值构造函数
- vector(begin,end)://赋值[begin,end)区间内另一个数组的元素到vector中
2.增加函数
- void push_back(const T& x)://向尾部增加一个元素x
- iterator insert(iterator it,const T& x)://向量中迭代器指向元素前增加一个元素x
- iterator insert(iterator it,int n,const T& x)://向量中迭代器指向元素前增加n个相同元素x
- iterator insert(iterator it,const_iterator first,const_iterator last)://向量中迭代器指向元素前插入另一个相同类型向量的[firs.last)间的数据
3.删除函数
- iterator erase(iterator it):删除向量中迭代器指向元素
- iterator erase(iterator first,iterator last):删除向量中[first,last)中元素
- void pop_back():删除向量中最后一个元素
- void clear():情况向量中所有元素
4.遍历函数
- reference at(int pos)://返回pos位置元素的引用
- reference front()://返回首元素的引用
- reference back()://返回尾元素的引用
- iterator begin()://返回向量头指针,指向第一个元素
- iterator end()://返回为指针,指向向量最后一个元素的下一个位置
- reverse_iterator rbein()://反向迭代器,指向最后一个元素
- reverse_iterator rend()://指向第一个元素之前的位置
5.判断函数
- bool empty() const://判断向量是否为空,为空,则向量中无元素
6.大小函数
- int size() const://返回向量中元素的个数
- int capacity() const: //返回当前向量中宏能容纳的最大元素值
- int max_size() const://返回最大可允许的vector元素数量值
7.其他函数
- void swap(vector&);//交换连个同类型的数据
- void assign(int n,const T& x);//设置向量中第n个元素为x
- void assign(const_iterator first,const_iterator last)://向量中[first,last)中元素设置成当前向量元素
示例:
1.初始化
- #include<iostream>
- #include<vector>
- using namespace std;
- class A
- {
- //空类
- };
- int main()
- {
- //int型vector
- vector<int> vecInt;
- //float型vector
- vector<float> vecFloat;
- //自定义类型,保存类A的vector
- vector<A> vecA;
- //自定义类型,保存指向类A的指针的vector
- vector<A*> vecPointA;
- return 0;
- }
- #include<iostream>
- #include<vector>
- using namespace std;
- class A
- {
- //空类
- };
- int main()
- {
- //int型vector,包含3个元素
- vector<int> vecIntA(3);
- //int型vector,包含3个元素且每个元素都是9
- vector<int> vecIntB(3,9);
- //复制vecIntB到vecIntC
- vector<int> vecIntC(vecIntB);
- int iArray[]={2,4,6};
- //创建vecIntD
- vector<int> vecIntD(iArray,iArray+3);
- //打印vectorA,此处也可以用下面注释内的代码来输出vector中的数据
- /*for(int i=0;i<vecIntA.size();i++)
- {
- cout<<vecIntA[i]<<" ";
- }*/
- cout<<"vecIntA:"<<endl;
- for(vector<int>::iterator it = vecIntA.begin();it!=vecIntA.end();it++)
- {
- cout<<*it<<" ";
- }
- cout<<endl;
- //打印vecIntB
- cout<<"VecIntB:"<<endl;
- for(vector<int>::iterator it = vecIntB.begin() ;it!=vecIntB.end();it++)
- {
- cout<<*it<<" ";
- }
- cout<<endl;
- //打印vecIntC
- cout<<"VecIntB:"<<endl;
- for(vector<int>::iterator it = vecIntC.begin() ;it!=vecIntC.end();it++)
- {
- cout<<*it<<" ";
- }
- cout<<endl;
- //打印vecIntD
- cout<<"vecIntD:"<<endl;
- for(vector<int>::iterator it = vecIntD.begin() ;it!=vecIntD.end();it++)
- {
- cout<<*it<<" ";
- }
- cout<<endl;
- return 0;
- }
2.增加及获得元素:
- #include<iostream>
- #include<vector>
- using namespace std;
- class A
- {
- public:
- int n;
- public:
- A(int n)
- {
- this->n = n;
- }
- };
- int main()
- {
- //int型vector,包含3个元素
- vector<A> vecClassA;
- A a1(1);
- A a2(2);
- A a3(3);
- //插入1 2 3
- vecClassA.push_back(a1);
- vecClassA.push_back(a2);
- vecClassA.push_back(a3);
- int nSize = vecClassA.size();
- cout<<"vecClassA:"<<endl;
- //打印vecClassA,方法一:
- for(int i=0;i<nSize;i++)
- {
- cout<<vecClassA[i].n<<" ";
- }
- cout<<endl;
- //打印vecClassA,方法二:
- for(int i=0;i<nSize;i++)
- {
- cout<<vecClassA.at(i).n<<" ";
- }
- cout<<endl;
- //打印vecClassA,方法三:
- for(vector<A>::iterator it = vecClassA.begin();it!=vecClassA.end();it++)
- {
- cout<<(*it).n<<" ";
- }
- cout<<endl;
- return 0;
- }
3.修改元素
修改元素方法有三:1.数组修改 2.引用修改3.迭代器修改
- #include<iostream>
- #include<vector>
- using namespace std;
- int main()
- {
- //int型vector,包含3个元素
- vector<int> vecIntA;
- //插入1 2 3
- vecIntA.push_back(1);
- vecIntA.push_back(2);
- vecIntA.push_back(3);
- int nSize = vecIntA.size();
- //通过引用修改vector
- cout<<"通过数组修改,第二个元素为8:"<<endl;
- vecIntA[1]=8;
- cout<<"vecIntA:"<<endl;
- //打印vectorA
- for(vector<int>::iterator it = vecIntA.begin();it!=vecIntA.end();it++)
- {
- cout<<*it<<" ";
- }
- cout<<endl;
- //通过引用修改vector
- cout<<"通过引用修改,第二个元素为18:"<<endl;
- int &m = vecIntA.at(1);
- m=18;
- cout<<"vecIntA:"<<endl;
- //打印vectorA
- for(vector<int>::iterator it = vecIntA.begin();it!=vecIntA.end();it++)
- {
- cout<<*it<<" ";
- }
- cout<<endl;
- //通过迭代器修改vector
- cout<<"通过迭代器修改,第二个元素为28"<<endl;
- vector<int>::iterator itr = vecIntA.begin()+1;
- *itr = 28;
- cout<<"vecIntA:"<<endl;
- //打印vectorA
- for(vector<int>::iterator it = vecIntA.begin();it!=vecIntA.end();it++)
- {
- cout<<*it<<" ";
- }
- cout<<endl;
- return 0;
- }
运行结果:

4.删除
删除向量主要通过erase和pop_back
- #include<iostream>
- #include<vector>
- using namespace std;
- int _tmain(int argc, _TCHAR* argv[])
- {
- //int型vector,包含3个元素
- vector<int> vecIntA;
- //循环插入1 到10
- for(int i=1;i<=10;i++)
- {
- vecIntA.push_back(i);
- }
- vecIntA.erase(vecIntA.begin()+4);
- cout<<"删除第5个元素后的向量vecIntA:"<<endl;
- //打印vectorA
- for(vector<int>::iterator it = vecIntA.begin();it!=vecIntA.end();it++)
- {
- cout<<*it<<"\t";
- }
- cout<<endl;
- //删除第2-5个元素
- vecIntA.erase(vecIntA.begin()+1,vecIntA.begin()+5);
- cout<<"删除第2-5个元素后的vecIntA:"<<endl;
- //打印vectorA
- for(vector<int>::iterator it = vecIntA.begin();it!=vecIntA.end();it++)
- {
- cout<<*it<<"\t";
- }
- cout<<endl;
- //删除最后一个元素
- vecIntA.pop_back();
- cout<<"删除最后一个元素后的vecIntA:"<<endl;
- //打印vectorA
- for(vector<int>::iterator it = vecIntA.begin();it!=vecIntA.end();it++)
- {
- cout<<*it<<"\t";
- }
- cout<<endl;
- return 0;
- }
运行结果:

文章转载:
vector容器用法详解 - 蒲公英110 - 博客园 (cnblogs.com)
相关文章:
C/C++ vector详解
要想了解STL,就必须会看: cplusplus.comhttps://legacy.cplusplus.com/ 官方内容全都是英文的,可以参考: C/C初始识https://blog.csdn.net/2301_77087344/article/details/138596294?spm1001.2014.3001.5501 vectorÿ…...
使用libtorch加载YOLOv8生成的torchscript文件进行目标检测
在网上下载了60多幅包含西瓜和冬瓜的图像组成melon数据集,使用 LabelMe 工具进行标注,然后使用 labelme2yolov8 脚本将json文件转换成YOLOv8支持的.txt文件,并自动生成YOLOv8支持的目录结构,包括melon.yaml文件,其内容…...
Oracle 并行和 session 数量的
这也就是为什么我们指定parallel为4,而实际并行度为8的原因。 insert create index,发现并行数都是加倍的 Indexes seem always created with parallel degree 1 during import as seen from a sqlfile. The sql file shows content like: CREATE INDE…...
Android 版本与 API level 以及 NDK 版本对应
采用 Android studio 开发 Android app 的时候,需要选择支持的最低 API Level 和使用的 NDK 版本,对应开发 app 的最低 SDK 版本: 在 app 的 build.gradle 文件里,对应于代码如下: 目前各版本的占有率情况如下…...
护网经验面试题目原版
文章目录 一、护网项目经验1.项目经验**Hvv的分组和流程**有没有遇到过有意思的逻辑漏洞?有没有自己开发过武器/工具?有做过代码审计吗?有0day吗有cve/cnvd吗?有src排名吗?有没有写过技战法有钓鱼经历吗?具…...
ipa 覆盖算法测试
相关文章 ipa 功能包测试 ipa 分区算法 ipa 分区算法总结,部分算法图解 ipa 覆盖算法分析(一) ipa 覆盖算法分析(二) 测试 网上找的地图: fig.1 测试地图 opencv fig.2 opencv 显示的覆盖路径 rviz fi…...
linuxwindows硬件信息midecod和wmic命令
1、命令dmidecode -t实例 1.1命令格式 dmidecode -t [类型代码或名称 ] 指令 1.2获取系统信息 [rootlala docker]# dmidecode -t 1 1.3获取主板信息: [rootshanghai docker]# dmidecode -t 2 1.4获取CPU ID dmidecode -t 4 | grep ID 1.5获取系统序列号 …...
03. SpringBoot 整合 Redis
文章目录 Jedis导入依赖测试连接Jedis 实现事务 SpringBoot 整合 RedisRedisTemplateSpringBoot 整合 Redis 测试RedisTemplate 序列化RedisUtils Jedis Jedis 是 Redis 官方推荐的 Java 连接工具。 导入依赖 </dependencies><dependency><groupId>redis.c…...
01-Linux【准备篇】
一、学Linux的作用? 1.Linux下开发(部署)软件项目 2.Linux运维 二、Linux的强与弱 1.薄弱 个人桌面领域的应用 此领域是传统Linux应用薄弱的环节,近些年随着Ubuntu、fedora等优秀桌面环境的兴起,Linux在个人桌面领域的占有率在慢慢提高…...
在IDEA中配置servlet(maven配置完成的基础下)
在IDEA中配置servlet(maven配置完成的基础下) 1.先新建一个项目 2.选择尾巴是webapp的,名称自定义 3.点击高级设置,修改组id 点击创建,等待jar包下载完成。在pom.xml中配置以下 <dependency><groupId>ja…...
pyqt6水平布局
效果预览 main_window.ui <?xml version"1.0" encoding"UTF-8"?> <ui version"4.0"><class>MainWindow</class><widget class"QMainWindow" name"MainWindow"><property name"geo…...
CLIP论文学习
学习来自B站bryanyzhu...
手把手教大家,怎么查看抖音小店的类目保证金?
大家好,我是喷火龙。 抖音小店的类目保证金也介绍过很多次了,不同的类目有不同的保证金,要想准确的知道自己想做的类目要交多少保证金的话,还是去官网查询比较可靠。 今天,就教大家怎么去查询自己想做的类目要交多少…...
5.24作业
...
Linux之LLVM、Clang、Clang++区别及用法实例(六十五)
简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…...
CentOS7 安装 Mysql 5.7:密码查看与修改、更改端口、开机启动
文章目录 下载 MySQL yum包安装MySQL源安装MySQL服务端,需要等待一些时间启动MySQL修改密码方式一:临时密码获取临时密码,MySQL5.7为root用户随机生成了一个密码通过临时密码登录MySQL,进行修改密码操作 方式二:skip-grant-tables…...
专业渗透测试 Phpsploit-Framework(PSF)框架软件小白入门教程(十三)
本系列课程,将重点讲解Phpsploit-Framework框架软件的基础使用! 本文章仅提供学习,切勿将其用于不法手段! 接上一篇文章内容,讲述如何进行Phpsploit-Framework软件的基础使用和二次开发。 我们,继续讲一…...
linux替换文件中的字符串
linux替换文件中的字符串 方法一:使用sed命令进行替换 sed -i s/原字符串/新字符串/g 文件名 ex: sed -i s/2024-04-25%/2024-04-26%/g sql10.sql ex:,"analyzer":"ik_analyzer" 替换为空 sed -i s/,"analyzer":"ik_analyz…...
【前端每日基础】day22——js控制结构
循环语句用于重复执行代码块。 for 循环 常用于需要精确控制循环次数的情况。 for (let i 0; i < 5; i) {console.log("Iteration:", i); }while 循环 当条件为真时重复执行代码块,适用于循环次数不确定但条件明确的情况。 let i 0;while (i <…...
npm详解
引言 在JavaScript和Node.js开发领域,npm(Node Package Manager)是一个不可或缺的工具。它不仅是一个包管理器,也是一个强大的生态系统,允许开发者共享和重用代码。本文将详细介绍npm的基本概念、主要功能以及如何有效…...
STIX Two字体:解决学术文档跨平台符号显示问题的专业方案
STIX Two字体:解决学术文档跨平台符号显示问题的专业方案 【免费下载链接】stixfonts OpenType Unicode fonts for Scientific, Technical, and Mathematical texts 项目地址: https://gitcode.com/gh_mirrors/st/stixfonts 你是否曾遇到过这样的困扰&#x…...
【信奥业余科普】02:给机器注入灵魂的两位天才——图灵与冯·诺依曼
第二篇信奥基础知识科普:了解“计算机科学之父”图灵与“现代计算机之父”冯诺依曼的伟大构想,以及现代计算机体系结构的基础奠定。 计算机硬件 写在前面的话:这是一系列专为对信奥(信息学奥赛)感兴趣的中小学生及家…...
《数论探微:进阶版》(Arithmetic Tales: Advanced Edition)伪
一、核心问题及解决方案(按踩坑频率排序) 问题 1:误删他人持有锁——最基础也最易犯的漏洞 成因:释放锁时未做身份校验,直接执行 DEL 命令删除键。典型场景:服务 A 持有锁后,业务逻辑耗时超过…...
如何快速上手cxmooc-tools:5分钟搞定三大网课平台自动刷课
如何快速上手cxmooc-tools:5分钟搞定三大网课平台自动刷课 【免费下载链接】cxmooc-tools 一个 超星(学习通)/智慧树(知到)/中国大学mooc 学习工具,火狐,谷歌,油猴支持.全自动任务,视频倍速秒过,作业考试题库,验证码自动打码(੧ᐛ੭挂科模式,启动) 项目地址: http…...
畜牧检测站综合监测系统设计与实现(有完整资料)
资料查找方式:特纳斯电子(电子校园网):搜索下面编号即可编号:T0542309M设计简介:本设计是基于单片机的畜牧检测站综合监测系统设计,主要实现以下功能:通过温湿度传感器检测温湿度 通…...
Genymotion模拟器安装与配置全攻略:从零开始搭建高效Android开发环境
1. 为什么选择Genymotion模拟器 如果你正在开发Android应用,肯定知道测试环节有多重要。官方模拟器虽然稳定,但那个启动速度和卡顿简直让人抓狂。我最早用Android Studio自带的模拟器,每次启动都要等上几分钟,调试时还经常卡死。后…...
从轮子直径到PID调参:编码器测速数据如何精准换算成实际速度(附单位换算避坑指南)
从脉冲到速度:编码器测速全流程实战指南 当你的机器人或智能车项目需要精确控制移动速度时,编码器测速的准确性直接决定了闭环控制的效果。但很多开发者都会遇到这样的困惑:为什么编码器读数看起来很大,但实际速度却与预期不符&am…...
从混乱到有序:用pd.to_numeric()高效清洗数据中的数字陷阱
1. 数据清洗中的数字陷阱:为什么需要pd.to_numeric() 刚入行数据分析时,我接手过一个电商价格分析项目。原始数据是从20个Excel表格合并而来,打开一看差点崩溃——价格字段里混着"199"、"199元"、"199.00"、&…...
Wonder3D完整指南:从单张图片到3D模型的终极AI建模方案
Wonder3D完整指南:从单张图片到3D模型的终极AI建模方案 【免费下载链接】Wonder3D Single Image to 3D using Cross-Domain Diffusion for 3D Generation 项目地址: https://gitcode.com/gh_mirrors/wo/Wonder3D Wonder3D是一款革命性的AI 3D建模工具&#x…...
手把手教你从零训练ChatGPT大模型:数据到部署全攻略(内含代码)
想要理解 ChatGPT 背后的原理?想亲手训练一个属于自己的大模型?这篇指南将带你走完从数据搜集到模型部署的完整流程。🎯 前言 ChatGPT、Claude、Kimi……这些大语言模型(LLM)正在改变我们的工作方式。但你有没有想过&a…...
