速通vector动态数组
2025-08-24 21:06:01
发布于:浙江
在刷题时,我们难免会遇到用普通数组难以解决题目的时候,例如:空间浪费太大(尤其是储存图时)、插入单个或多个元素时、删除单个或多个元素时……这时,我们可以使用动态数组vector,来帮忙缩短代码,提升运行效率。那本期,我们就由基础开始讲。
一、定义
在使用vector前,我们应先导入头文件,即:
#include<vector>
导入后,即可定义。格式为vector<DataType> 数组名(长度);
,例如:
vector<int> v(105);
长度也可不写,即数组为空。例如:
vector<int> v;
同时,这里还有一个小技巧。如果定义时想让数组全部赋值为同一元素,告别for
和memset()
!直接在长度后面跟上要赋值的元素即可!例如:
vector<char> v(105,'a');
二、访问
其实与普通数组相同,格式为数组名[下标]
,例如:
输入:
1 2 3 4 5
#include<iostream>
#include<vector>
using namespace std;
int main(){
vector<int> v(10);
for(int i=0;i<5;i++) cin>>v[i];
for(int i=0;i<5;i++) cout<<v[i]<<' ';
return 0;
}
输出:
1 2 3 4 5
三、插入
1.尾部插入
可使用vector内置的 push_back() 函数,格式为v.push_back(a)
,如:
v.push_back(5); //在v的尾部插入元素5
2.从中间插入
可使用vector内置的 insert() 函数,格式为v.insert(v.begin()+idx,a)
,如:
v.insert(v.begin()+3,5); //在v下标为3的位置插入元素5
四、删除
运用内置函数 erase() ,格式为v.erase(v.begin()+idx)
,如:
v.erase(v.begin()+3); //删除v中下标为3的元素
如果需要区间删除:
v.erase(v.begin()+3,v.begin()+5); //删除下标3~5的元素
五、查找
可使用算法库中的 find() 函数,需先导入 algorithm,即:
#include<algorithm>
find() 函数格式为find(v.begin(),v.end(),a)
,返回值为一个迭代器。如果没有在 中查找到 元素,它会返回v.end()
,由此可编译以下局部代码:
//查找v中是否有变量a这个元素
auto it=find(v.begin(),v.end(),a);
if(it==v.end()) cout<<"NO"; //不存在
else cout<<"YES";
可如果我们想知道这个元素的下标呢?我们可以使用 distance() 函数:
//查找v中变量a这个元素的下标
auto it=find(v.begin(),v.end(),a);
if(it==v.end()) cout<<"NO"; //不存在
else cout<<distance(v.begin(),it); //输出a所在的下标
六、其他
传回长度 | 判断是否为空 | 传回首个元素 | 传回末尾元素 | 清空数据 | 删除末尾元素 |
---|---|---|---|---|---|
v.size() | v.empty() | v.front() | v.back() | v.clear() | v.pop_back() |
看到这就点个赞吧
后续还会有拓展内容
这里空空如也
有帮助,赞一个