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 …

十二、OpenAI语音转文本

1 介绍 音频API提供两个语音转文本的端点&#xff0c;transciptions 和 translations, 它们基于最强的开源模型large-v2 Whisper.可以被使用到&#xff1a; 将音频转换成任何语言的音频翻译并转化音频到英文 上传文件的大小限制在25M以内&#xff0c;支持的音频格式有&#x…

【Typescript】类、类实例、构造函数、类是否也是构造函数....

务必注意&#xff1a;Typescript中类也是一个构造函数【可以new】但是有时候针对不确定的类型需要as转换一下 才能new class Test { }class Test01 extends Test {a 1 }function ok<T extends typeof Test>(asyncClass: T): T {/*** 1. 这里的T是一个【类的类型】*/ret…

Java面试题:请分析Java中的并发工具类,如ConcurrentHashMap和CopyOnWriteArrayList的内部实现原理

Java中的并发工具类是java.util.concurrent包提供的一些用于多线程环境下的集合类&#xff0c;它们通过不同的机制来保证线程安全。以下是ConcurrentHashMap和CopyOnWriteArrayList的内部实现原理分析&#xff1a; ConcurrentHashMap ConcurrentHashMap是一个线程安全的哈希表…

React常见面试题及参考答案(3万字长文)

目录 描述React中的组件生命周期 解释React中的JSX是什么 什么是React中的虚拟DOM?

辐射度技术在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…

封装 UpdateManager 实现启动微信小程序时自动强制更新

背景 微信小程序发布新版本后&#xff0c;微信有自己的更新策略&#xff1a;异步更新、同步更新。异步更新会在用户下次冷启动时才会加载新版本&#xff0c;本次打开的仍然是旧版本。为了保证更多用户能够访问的新版本&#xff0c;本文利用微信wx.getUpdateManager()暴露的Upd…

【综合分析题】同事共事

题目&#xff1a;在单位&#xff0c;甲同事自私&#xff0c;乙同事自卑&#xff0c;丙同事自负&#xff0c;你更愿意和哪个同事共事&#xff1f; 逐字稿&#xff1a; 各位考官好&#xff0c;在我看来&#xff0c;在单位和同事共事&#xff0c;其实是我们实践11大于2&#xff0…

leetcode LCR 076. 数组中的第 K 个最大元素

. - 力扣&#xff08;LeetCode&#xff09; 给定整数数组 nums 和整数 k&#xff0c;请返回数组中第 k 个最大的元素。 请注意&#xff0c;你需要找的是数组排序后的第 k 个最大的元素&#xff0c;而不是第 k 个不同的元素。 示例 1: 输入: [3,2,1,5,6,4] 和 k 2 输出: 5示例…

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

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

人工智能原理第十四章课后习题答案仅供参考

14.1 叙述演绎推理、归纳推理、以及溯因推理的基本概念、内在联系。并讨论为什么说这三者是主要的推理模式 演绎推理是根据已知的一般性、真实性的前提,通过推理得出个别结论的推理方法,简而言之是从一般到特殊的推理。 归纳推理是以个别实例为前提,推导出一般性结论的推理形…

缓存归纳总结1

1. 何时需要考虑缓存一致性 缓存一致性主要在以下情况需要特别考虑&#xff1a; 读多写少场景&#xff1a;当数据读取操作远多于写入时&#xff0c;为了提高系统性能&#xff0c;通常会将数据缓存起来。但一旦数据源&#xff08;如数据库&#xff09;中的数据发生变化&#xf…

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

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

多线程案例(线程池)

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

路径规划搜路算法有哪些?

路径规划搜索算法是帮助移动机器人或自动化系统在环境中从起点导航至终点的计算方法。以下是一些常见的路径规划搜索算法&#xff1a; Dijkstra算法&#xff1a;一种经典的最短路径搜索算法&#xff0c;适用于没有负权边的图。 A*算法&#xff1a;一种启发式搜索算法&#xff…

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. 源由 开源项目最主要的问题就是所有配置是开放…

Python模块方法总结

一 模块简介 模块&#xff08;module&#xff09;和C语言中的头文件以及Java中的包很类似&#xff0c;在Python中用关键字import来引入某个模块&#xff0c;比如要引用模块math&#xff0c;就可以在文件最开始的地方用import math来引入。 import math#这样会报错 print sqrt…