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)

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

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

相关文章

sql聚合函数使用-笔记

sql聚合函数使用-笔记 SELECT SUM ( case when procurement_type 公益推送 then 1 else 0 end ) gywxTotal,SUM ( CASE WHEN (status 1 and procurement_type 公益推送) THEN 1 ELSE 0 END ) gywxYsc,SUM ( CASE WHEN (status ! 1 and procurement_type 公益推送) THEN 1 …

辐射度技术在AI去衣中的魅力与科学

引言&#xff1a; 在当今的数字化时代&#xff0c;人工智能正逐渐渗透到我们生活的方方面面。其中&#xff0c;AI去衣技术作为一项颇具争议但又不失其科技创新的应用&#xff0c;正引起越来越多的关注和讨论。而在实现高质量图像渲染的过程中&#xff0c;辐射度技术凭借其卓越的…

CAD二次开发(5)-用户交互仿系统命令

1. 工具类&#xff1a;PromptTool.cs using Autodesk.AutoCAD.EditorInput; using Autodesk.AutoCAD.Geometry; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace _04用户交互 {public static…

GEE26:批量导出逐日、逐月、逐季节和逐年的遥感影像(以NDVI为例)

影像导出 写在前面1.逐日数据导出2.逐月数据导出3.季节数据导出4.逐年数据导出 写在前面 最近很多小伙伴们私信我&#xff0c;问我如何高效导出遥感数据&#xff0c;从逐日到逐季度&#xff0c;我都有一套自己的方法&#xff0c;今天就来和大家分享一下&#xff01;   &#…

基于YOLOv8+PySide6的快递分类管理系统

1、背景 随着电子商务的飞速发展&#xff0c;快递行业所承受的数据处理需求愈发庞大。在这样的背景下&#xff0c;传统的手工分类方法已经显得力不从心&#xff0c;因其不仅耗时耗力&#xff0c;还存在着易出错的隐患。因此&#xff0c;迫切需要研发出一套高效而准确的自动化系…

多线程案例(线程池)

White graces&#xff1a;个人主页 &#x1f649;专栏推荐:Java入门知识&#x1f649; &#x1f649; 内容推荐:<计算坤是如何工作的>&#x1f649; &#x1f439;今日诗词:百年兴衰皆由人, 不由天&#x1f439; ⛳️点赞 ☀️收藏⭐️关注&#x1f4ac;卑微小博主&…

go 微服务框架kratos使用中间件的方法

一、中间件的概念 在go语言中&#xff0c;中间件是一种用于处理http请求的开发模式&#xff0c;允许开发人员在请求到达处理程序之前或之后执行特定的操作&#xff0c;如日志记录、身份验证、错误处理等。 中间件通常是一个函数&#xff0c;它接收一个 http.Handler 作为参数…

Ardupilot开源代码之Rover上路 - 后续4

Ardupilot开源代码之Rover上路 - 后续4 1. 源由2. 深度配置2.1 设置倒车按钮2.1.1 前进2.1.2 倒退 2.2 MP无法连接ESP82662.3 最小油门校准 3. 遗留&后续3.1 高精度编码器问题3.2 OV5647 720P30FPS 马赛克问题 4. 参考资料 1. 源由 开源项目最主要的问题就是所有配置是开放…

信息安全从运维到运营:CISAW安全运维方向

随着数据中心规模扩大&#xff0c;安全运维内生需要逐渐向安全运营进化&#xff0c;统一安全理念&#xff0c;提高服务意识&#xff0c;提升专业能力。安全运营是对安全运维的继承式发展&#xff0c;而不是颠覆&#xff0c;意味着以业务发展为基础&#xff0c;以事件核查为线索…

【gradle】MAC下用gradle构建部署springboot项目

MAC下用gradle构建部署springboot项目 前言下载安装配置gradle下载安装下载可能出现的问题 &#xff08;zsh: command not found: brew&#xff09; 配置环境变量配置国内下载源全局配置单个项目配置 通过idea构建项目构建后的项目结构 小结延伸 前言 好久以前就听说gradle了&…

RAG概述(一):RAG架构的演进

目录 概述 RAG核心步骤 Indexing索引 Retrieval检索 Generation生成​​​​​​​ Native RAG Advanced RAG Modular RAG 参考 概述 RAG&#xff1a;Retrieval-Augmented Generation 检索增强生成。 RAG通过结合LLMs的内在知识和外部数据库的非参数化数据&#xff…

与MySQL的初相遇

&#x1f30e;初识MySQL 注&#xff1a;本文SQL语句只为了验证猜想&#xff0c;不会也不要紧。 文章目录&#xff1a; MySql开端 认识数据库       什么是数据库       主流数据库       MySQL的本质 MySQL基础使用       连接mysql服务器     …

自动化您的任务——crewAI 初学者教程

今天&#xff0c;我写这篇文章是为了分享您开始使用一个非常流行的多智能体框架所需了解的所有信息&#xff1a;crewAI。 我将在这里或那里跳过一些内容&#xff0c;使本教程成为一个精炼的教程&#xff0c;概述帮助您入门的关键概念和要点 今天&#xff0c;我写这篇文章是为了…

easy-rule规则引擎使用

简介 轻量级的规则引擎&#xff0c;易于学习的api 简单来说&#xff0c;规则引擎就是一个函数&#xff1a;yf(x1,x2,…,xn) 将业务代码和业务规则分离&#xff0c;解耦业务决策和业务代码的绑定关系 入门示例 依赖引入 <dependency><groupId>org.jeasy</grou…

页面<html>上多了一个滚动条,定位发现是<body>里面多了一个id为trans-tooltip的div

现象分析&#xff1a; 页面根标签html多了一个滚动条&#xff0c;发现body里面多了一个id为trans-tooltip的div&#xff0c;虽然width为0&#xff0c;height为0&#xff0c;但是其子元素还是有高度&#xff0c;占据了空间&#xff0c;最终导致了滚动条&#xff1b; 根本原因&…

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

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

Java面试题--JVM大厂篇(1-10)

引言&#xff1a; 在这个信息时代&#xff0c;对于准备进入大厂工作的朋友们来说&#xff0c;对于JVM&#xff08;Java虚拟机&#xff09;的掌握是面试中的一项重要内容。下面是一些精选的JVM面试题&#xff0c;希望对大家能有所帮助。 正文&#xff1a; 1. JVM有哪几种垃圾收…

[CISCN2024]-PWN:gostack解析(go语言程序,syscall)

查看保护 ida比较复杂&#xff0c;建议动调配合静态分析程序运行 这里函数返回不用leave和ret&#xff0c;而是利用add rsp和ret&#xff0c;所以要动调查看到底要覆盖哪里。 完整exp&#xff1a; from pwn import* pprocess(./gostack) syscall0x4616c9 pop_rax0x40f984 po…

GB报文中的Cseq值的注意点

一、 问题现象 【问题现象】NVR使用GB接三方平台发现倍速回放时&#xff0c; 【现场拓扑】现场拓扑如下 &#xff08;1&#xff09; NVR侧使用家用宽带的方式&#xff0c;通过国标跨公网接入三方平台。 图1.1&#xff1a;网络拓扑 二、 抓包分析 INVITE sip:420000004013200…

OpenAI安全系统负责人:从头构建视频生成扩散模型

作者 | Lilian Weng OneFlow编译 翻译&#xff5c;杨婷、宛子琳、张雪聃 题图由SiliconFlow MaaS平台生成 过去几年&#xff0c;扩散模型&#xff08;Diffusion models&#xff09;在图像合成领域取得了显著成效。目前&#xff0c;研究界已开始尝试更具挑战性的任务——将该技术…