当前位置: 首页 > news >正文

C/C++ vector详解

要想了解STL,就必须会看:

cplusplus.comicon-default.png?t=N7T8https://legacy.cplusplus.com/

官方内容全都是英文的,可以参考:

C/C++初始识icon-default.png?t=N7T8https://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.初始化


  1. #include<iostream>  
  2. #include<vector>  
  3.   
  4. using namespace std;  
  5.   
  6. class A  
  7. {  
  8.     //空类  
  9. };  
  10. int main()  
  11. {  
  12.       
  13.     //int型vector  
  14.     vector<int> vecInt;  
  15.   
  16.     //float型vector  
  17.     vector<float> vecFloat;  
  18.   
  19.     //自定义类型,保存类A的vector  
  20.     vector<A> vecA;  
  21.   
  22.     //自定义类型,保存指向类A的指针的vector  
  23.     vector<A*> vecPointA;  
  24.   
  25.     return 0;  
  26. }  
  1. #include<iostream>  
  2. #include<vector>  
  3.   
  4. using namespace std;  
  5.   
  6. class A  
  7. {  
  8.     //空类  
  9. };  
  10. int main()  
  11. {  
  12.       
  13.     //int型vector,包含3个元素  
  14.     vector<int> vecIntA(3);  
  15.       
  16.     //int型vector,包含3个元素且每个元素都是9  
  17.     vector<int> vecIntB(3,9);  
  18.   
  19.     //复制vecIntB到vecIntC  
  20.     vector<int> vecIntC(vecIntB);  
  21.       
  22.     int iArray[]={2,4,6};  
  23.     //创建vecIntD  
  24.     vector<int> vecIntD(iArray,iArray+3);  
  25.   
  26.     //打印vectorA,此处也可以用下面注释内的代码来输出vector中的数据  
  27.     /*for(int i=0;i<vecIntA.size();i++) 
  28.     { 
  29.         cout<<vecIntA[i]<<"     "; 
  30.     }*/  
  31.   
  32.     cout<<"vecIntA:"<<endl;  
  33.     for(vector<int>::iterator it = vecIntA.begin();it!=vecIntA.end();it++)  
  34.     {  
  35.         cout<<*it<<"     ";  
  36.     }  
  37.     cout<<endl;  
  38.   
  39.     //打印vecIntB  
  40.     cout<<"VecIntB:"<<endl;  
  41.     for(vector<int>::iterator it = vecIntB.begin() ;it!=vecIntB.end();it++)  
  42.     {  
  43.         cout<<*it<<"     ";  
  44.     }  
  45.     cout<<endl;  
  46.   
  47.     //打印vecIntC  
  48.     cout<<"VecIntB:"<<endl;  
  49.     for(vector<int>::iterator it = vecIntC.begin() ;it!=vecIntC.end();it++)  
  50.     {  
  51.         cout<<*it<<"     ";  
  52.     }  
  53.     cout<<endl;  
  54.   
  55.     //打印vecIntD  
  56.     cout<<"vecIntD:"<<endl;  
  57.     for(vector<int>::iterator it = vecIntD.begin() ;it!=vecIntD.end();it++)  
  58.     {  
  59.         cout<<*it<<"     ";  
  60.     }  
  61.     cout<<endl;  
  62.     return 0;  
  63. }  

2.增加及获得元素:

  1. #include<iostream>  
  2. #include<vector>  
  3.   
  4. using namespace std;  
  5.   
  6. class A  
  7. {  
  8. public:  
  9.     int n;  
  10. public:  
  11.     A(int n)  
  12.     {  
  13.         this->n = n;  
  14.     }  
  15. };  
  16.   
  17. int main()  
  18. {  
  19.       
  20.     //int型vector,包含3个元素  
  21.     vector<A> vecClassA;  
  22.   
  23.     A a1(1);  
  24.     A a2(2);  
  25.     A a3(3);  
  26.   
  27.     //插入1 2 3  
  28.     vecClassA.push_back(a1);  
  29.     vecClassA.push_back(a2);  
  30.     vecClassA.push_back(a3);  
  31.       
  32.       
  33.     int nSize = vecClassA.size();  
  34.   
  35.     cout<<"vecClassA:"<<endl;  
  36.   
  37.     //打印vecClassA,方法一:  
  38.     for(int i=0;i<nSize;i++)  
  39.     {  
  40.         cout<<vecClassA[i].n<<"     ";  
  41.     }  
  42.     cout<<endl;  
  43.   
  44.     //打印vecClassA,方法二:    
  45.     for(int i=0;i<nSize;i++)  
  46.     {  
  47.         cout<<vecClassA.at(i).n<<"     ";  
  48.     }  
  49.     cout<<endl;  
  50.   
  51.     //打印vecClassA,方法三:  
  52.     for(vector<A>::iterator it = vecClassA.begin();it!=vecClassA.end();it++)  
  53.     {  
  54.         cout<<(*it).n<<"     ";  
  55.     }  
  56.     cout<<endl;  
  57.       
  58.     return 0;  
  59. }  

3.修改元素


修改元素方法有三:1.数组修改 2.引用修改3.迭代器修改

  1. #include<iostream>  
  2. #include<vector>  
  3.   
  4. using namespace std;  
  5.   
  6.   
  7. int main()  
  8. {  
  9.       
  10.     //int型vector,包含3个元素  
  11.     vector<int> vecIntA;  
  12.   
  13.     //插入1 2 3  
  14.     vecIntA.push_back(1);  
  15.     vecIntA.push_back(2);  
  16.     vecIntA.push_back(3);  
  17.       
  18.     int nSize = vecIntA.size();  
  19.   
  20.     //通过引用修改vector  
  21.     cout<<"通过数组修改,第二个元素为8:"<<endl;  
  22.     vecIntA[1]=8;  
  23.   
  24.     cout<<"vecIntA:"<<endl;  
  25.     //打印vectorA  
  26.     for(vector<int>::iterator it = vecIntA.begin();it!=vecIntA.end();it++)  
  27.     {  
  28.         cout<<*it<<"     ";  
  29.     }  
  30.     cout<<endl;  
  31.       
  32.     //通过引用修改vector  
  33.     cout<<"通过引用修改,第二个元素为18:"<<endl;  
  34.     int &m = vecIntA.at(1);  
  35.     m=18;  
  36.   
  37.     cout<<"vecIntA:"<<endl;  
  38.     //打印vectorA  
  39.     for(vector<int>::iterator it = vecIntA.begin();it!=vecIntA.end();it++)  
  40.     {  
  41.         cout<<*it<<"     ";  
  42.     }  
  43.     cout<<endl;  
  44.   
  45.     //通过迭代器修改vector  
  46.     cout<<"通过迭代器修改,第二个元素为28"<<endl;  
  47.     vector<int>::iterator itr = vecIntA.begin()+1;  
  48.     *itr = 28;  
  49.   
  50.     cout<<"vecIntA:"<<endl;  
  51.     //打印vectorA  
  52.     for(vector<int>::iterator it = vecIntA.begin();it!=vecIntA.end();it++)  
  53.     {  
  54.         cout<<*it<<"     ";  
  55.     }  
  56.     cout<<endl;  
  57.   
  58.     return 0;  

运行结果:

4.删除


删除向量主要通过erase和pop_back 

  1. #include<iostream>  
  2. #include<vector>  
  3.   
  4. using namespace std;  
  5.   
  6.   
  7. int _tmain(int argc, _TCHAR* argv[])  
  8. {  
  9.       
  10.     //int型vector,包含3个元素  
  11.     vector<int> vecIntA;  
  12.   
  13.     //循环插入1 到10  
  14.     for(int i=1;i<=10;i++)  
  15.     {  
  16.         vecIntA.push_back(i);  
  17.     }  
  18.       
  19.     vecIntA.erase(vecIntA.begin()+4);  
  20.           
  21.     cout<<"删除第5个元素后的向量vecIntA:"<<endl;  
  22.     //打印vectorA  
  23.     for(vector<int>::iterator it = vecIntA.begin();it!=vecIntA.end();it++)  
  24.     {  
  25.         cout<<*it<<"\t";  
  26.     }  
  27.     cout<<endl;  
  28.   
  29.     //删除第2-5个元素  
  30.     vecIntA.erase(vecIntA.begin()+1,vecIntA.begin()+5);  
  31.   
  32.     cout<<"删除第2-5个元素后的vecIntA:"<<endl;  
  33.     //打印vectorA  
  34.     for(vector<int>::iterator it = vecIntA.begin();it!=vecIntA.end();it++)  
  35.     {  
  36.         cout<<*it<<"\t";  
  37.     }  
  38.     cout<<endl;  
  39.   
  40.     //删除最后一个元素  
  41.     vecIntA.pop_back();  
  42.   
  43.     cout<<"删除最后一个元素后的vecIntA:"<<endl;  
  44.     //打印vectorA  
  45.     for(vector<int>::iterator it = vecIntA.begin();it!=vecIntA.end();it++)  
  46.     {  
  47.         cout<<*it<<"\t";  
  48.     }  
  49.     cout<<endl;  
  50.   
  51.     return 0;  
  52. }  

运行结果:

 文章转载:

vector容器用法详解 - 蒲公英110 - 博客园 (cnblogs.com)

相关文章:

C/C++ vector详解

要想了解STL&#xff0c;就必须会看&#xff1a; cplusplus.comhttps://legacy.cplusplus.com/ 官方内容全都是英文的&#xff0c;可以参考&#xff1a; C/C初始识https://blog.csdn.net/2301_77087344/article/details/138596294?spm1001.2014.3001.5501 vector&#xff…...

使用libtorch加载YOLOv8生成的torchscript文件进行目标检测

在网上下载了60多幅包含西瓜和冬瓜的图像组成melon数据集&#xff0c;使用 LabelMe 工具进行标注&#xff0c;然后使用 labelme2yolov8 脚本将json文件转换成YOLOv8支持的.txt文件&#xff0c;并自动生成YOLOv8支持的目录结构&#xff0c;包括melon.yaml文件&#xff0c;其内容…...

Oracle 并行和 session 数量的

这也就是为什么我们指定parallel为4&#xff0c;而实际并行度为8的原因。 insert create index&#xff0c;发现并行数都是加倍的 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 的时候&#xff0c;需要选择支持的最低 API Level 和使用的 NDK 版本&#xff0c;对应开发 app 的最低 SDK 版本&#xff1a; 在 app 的 build.gradle 文件里&#xff0c;对应于代码如下&#xff1a; 目前各版本的占有率情况如下&#xf…...

护网经验面试题目原版

文章目录 一、护网项目经验1.项目经验**Hvv的分组和流程**有没有遇到过有意思的逻辑漏洞&#xff1f;有没有自己开发过武器/工具&#xff1f;有做过代码审计吗&#xff1f;有0day吗有cve/cnvd吗&#xff1f;有src排名吗&#xff1f;有没有写过技战法有钓鱼经历吗&#xff1f;具…...

ipa 覆盖算法测试

相关文章 ipa 功能包测试 ipa 分区算法 ipa 分区算法总结&#xff0c;部分算法图解 ipa 覆盖算法分析&#xff08;一&#xff09; ipa 覆盖算法分析&#xff08;二&#xff09; 测试 网上找的地图&#xff1a; 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获取主板信息&#xff1a; [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的作用&#xff1f; 1.Linux下开发(部署)软件项目 2.Linux运维 二、Linux的强与弱 1.薄弱 个人桌面领域的应用 此领域是传统Linux应用薄弱的环节&#xff0c;近些年随着Ubuntu、fedora等优秀桌面环境的兴起&#xff0c;Linux在个人桌面领域的占有率在慢慢提高…...

在IDEA中配置servlet(maven配置完成的基础下)

在IDEA中配置servlet&#xff08;maven配置完成的基础下&#xff09; 1.先新建一个项目 2.选择尾巴是webapp的&#xff0c;名称自定义 3.点击高级设置&#xff0c;修改组id 点击创建&#xff0c;等待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...

手把手教大家,怎么查看抖音小店的类目保证金?

大家好&#xff0c;我是喷火龙。 抖音小店的类目保证金也介绍过很多次了&#xff0c;不同的类目有不同的保证金&#xff0c;要想准确的知道自己想做的类目要交多少保证金的话&#xff0c;还是去官网查询比较可靠。 今天&#xff0c;就教大家怎么去查询自己想做的类目要交多少…...

5.24作业

...

Linux之LLVM、Clang、Clang++区别及用法实例(六十五)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…...

CentOS7 安装 Mysql 5.7:密码查看与修改、更改端口、开机启动

文章目录 下载 MySQL yum包安装MySQL源安装MySQL服务端,需要等待一些时间启动MySQL修改密码方式一&#xff1a;临时密码获取临时密码&#xff0c;MySQL5.7为root用户随机生成了一个密码通过临时密码登录MySQL&#xff0c;进行修改密码操作 方式二&#xff1a;skip-grant-tables…...

专业渗透测试 Phpsploit-Framework(PSF)框架软件小白入门教程(十三)

本系列课程&#xff0c;将重点讲解Phpsploit-Framework框架软件的基础使用&#xff01; 本文章仅提供学习&#xff0c;切勿将其用于不法手段&#xff01; 接上一篇文章内容&#xff0c;讲述如何进行Phpsploit-Framework软件的基础使用和二次开发。 我们&#xff0c;继续讲一…...

linux替换文件中的字符串

linux替换文件中的字符串 方法一&#xff1a;使用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 循环 当条件为真时重复执行代码块&#xff0c;适用于循环次数不确定但条件明确的情况。 let i 0;while (i <…...

npm详解

引言 在JavaScript和Node.js开发领域&#xff0c;npm&#xff08;Node Package Manager&#xff09;是一个不可或缺的工具。它不仅是一个包管理器&#xff0c;也是一个强大的生态系统&#xff0c;允许开发者共享和重用代码。本文将详细介绍npm的基本概念、主要功能以及如何有效…...

RestClient

什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端&#xff0c;它允许HTTP与Elasticsearch 集群通信&#xff0c;而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级&#xff…...

AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

PHP和Node.js哪个更爽?

先说结论&#xff0c;rust完胜。 php&#xff1a;laravel&#xff0c;swoole&#xff0c;webman&#xff0c;最开始在苏宁的时候写了几年php&#xff0c;当时觉得php真的是世界上最好的语言&#xff0c;因为当初活在舒适圈里&#xff0c;不愿意跳出来&#xff0c;就好比当初活在…...

Java如何权衡是使用无序的数组还是有序的数组

在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...

Nuxt.js 中的路由配置详解

Nuxt.js 通过其内置的路由系统简化了应用的路由配置&#xff0c;使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...

如何在最短时间内提升打ctf(web)的水平?

刚刚刷完2遍 bugku 的 web 题&#xff0c;前来答题。 每个人对刷题理解是不同&#xff0c;有的人是看了writeup就等于刷了&#xff0c;有的人是收藏了writeup就等于刷了&#xff0c;有的人是跟着writeup做了一遍就等于刷了&#xff0c;还有的人是独立思考做了一遍就等于刷了。…...

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中&#xff0c;新增了一个本地验证码接口 /code&#xff0c;使用函数式路由&#xff08;RouterFunction&#xff09;和 Hutool 的 Circle…...

ABAP设计模式之---“简单设计原则(Simple Design)”

“Simple Design”&#xff08;简单设计&#xff09;是软件开发中的一个重要理念&#xff0c;倡导以最简单的方式实现软件功能&#xff0c;以确保代码清晰易懂、易维护&#xff0c;并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计&#xff0c;遵循“让事情保…...

论文笔记——相干体技术在裂缝预测中的应用研究

目录 相关地震知识补充地震数据的认识地震几何属性 相干体算法定义基本原理第一代相干体技术&#xff1a;基于互相关的相干体技术&#xff08;Correlation&#xff09;第二代相干体技术&#xff1a;基于相似的相干体技术&#xff08;Semblance&#xff09;基于多道相似的相干体…...

push [特殊字符] present

push &#x1f19a; present 前言present和dismiss特点代码演示 push和pop特点代码演示 前言 在 iOS 开发中&#xff0c;push 和 present 是两种不同的视图控制器切换方式&#xff0c;它们有着显著的区别。 present和dismiss 特点 在当前控制器上方新建视图层级需要手动调用…...