c++ vector容器
一、vector介绍
vector是一个序列容器模板类,它包含在#include<vecor>头文件中,在cppreference中std::vecotr是一个封装动态大小的序列容器,从定义中我们能知道几个关键词,“动态”,“序列”,“容器”。
1.动态代表着vector的存储是自动处理的,可以根据需要进行扩展。也就是说vector不需要在每次插入元素时重新分配内存,而只需要在额外的内存耗尽时重新分配。
我们可使用capacity()函数查询已分配的内存总量。
2.序列代表着vector中的元素是顺序存储的,那么我们不仅可以用迭代器访问,也可以使用指针去访问。也就是说我们可以像普通的数组一样,通过元素所在的位置去访问
这个元素。
3.容器代表着vector可以存放各种类型的数据,可以是像int,char,string,long这种自带的,也可以是自己定义的类型,当然也可以容器套容器,像套娃一样。
二、基本语法
1.定义vector
语法 :vector<数据类型>数组名(最大容量,初始所有元素),其中最大容量和初始所有元素是可选项,根据实际的情况来定义。
前面我们提到了vector中可以存放各种数据,我们用代码演示一下。
#include<iostream> #include<vector> #include<algorithm> //这里我们自己创建了一个学生类 class Student{ public: std::string name; int age; std::string sex; int id; }; int main(){ //定义了三个动态数组 //第一个数组类型是int整数型 //第二个是Student学生类型,并且大小是20,代表着20个学生 //第三个代表着数组大小为5,并且全部初始化为-1 std::vector<int> Int; std::vector<Student> Stu(20); std::vector<int> v(5, -1); return 0; }
这里用的是std::vector是因为我没有使用标准命名空间也就是:using namespace std;从上面的代码我们能够更加直观的了解到,vector是如何定义的,以及它可以存放的类型是多样的
2.vector的基本函数
在知道了如何定义之后,我们要知道该如何去使用vector,前面我们提到了可以使用capacity()来查看分配的内存。接下来我们来使用一下这个函数,顺便可以加深一下vector的太分配内存。
通过上图我们可以发现,如果我们在一开始没有给动态数组设定最大容量,那么它的值就0,反之就是我们设置的最大容量。那么问题来了,如果我们向一个设定了最大容量
的动态数组中存数据,当存储的数据超过最大容量的时候会怎么样呢?
如图:
这里我们使用了一个新的东西“push_back”,它表示向v这个数组的最后面添加一个数6。那么这里我们可以看到,v这个数组的最大容量为5,当我们向它的末尾
再添加一个元素的时候就会超过最大容量,这个时候我们使用capacity()查看发现变为了10。也就是说,当我们存储数据时如果超过了最大容量,vector会为我们
自动再分配内存。并且大小就是你之前设定的最大容量。
接下来将列举一些常用的函数
- push_back():向数组的末尾添加一个元素
- emplace_back():将一个就地构造的元素添加到末尾
- pop_back():删除数组末尾的元素
- insert():向数组中插入与元素
- erease():删除数组中的元素
- size():数组的大小
- clear():清空数组
- empty():判断数组是不是为空
- begin(),end():一个是指向数组头的指针,一个是指向数组尾 + 1的指针
- rbgin(),rend():也是返回的指针只不过一个是end - 1,一个是begin -1
还是那句话,实践出真知,上代码。
#include<iostream> #include<vector> #include<algorithm> //这里我们自己创建了一个学生类 class Student{ public: std::string name; int age; std::string sex; int id; }; int main(){ //定义了三个动态数组 //第一个数组类型是int整数型 //第二个是Student学生类型,并且大小是20,代表着20个学生 //第三个代表着数组大小为5,并且全部初始化为-1 std::vector<int> Int; std::vector<Student> Stu(20); std::vector<int> v(5, -1); for (int i = 0; i < 10; i++){ Int.push_back(i);//不断地向Int中添加元素 } std::cout<< " 添加元素后数组的大小为" << Int.size() << std::endl; Int.emplace_back(5); auto it = Int.begin();//迭代器确定要插入的位置 it = Int.insert(it,7); if(!Int.empty()) std::cout << "数组不为空" << std::endl; std::cout << "此时数组中的元素有:"; for (int i = 0; i < Int.size(); i++){ std::cout << Int[i] << " "; } Int.clear(); std::cout << Int.size() << std::endl; return 0; }
以上就是vector的一些基本用法。
详情请参考
https://en.cppreference.com/w/cpp/container/vector
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· Apache Tomcat RCE漏洞复现(CVE-2025-24813)