精讲vector动态数组
2025-09-21 21:09:51
发布于:浙江
求赞求赞求赞~~
在做题时,我们难免会遇到用普通数组难以解决题目的时候,例如:空间浪费太大(尤其是储存图时)、插入单个或多个元素时、删除单个或多个元素时……这时,我们可以使用动态数组 vector ,来帮忙缩短代码,提升运行效率。那本期,我们就由基础开始讲。
一、定义
在使用vector前,我们应先导入头文件,即:
#include<vector>
导入后,即可定义。格式为vector<DataType> 数组名(长度);,例如:
vector<int> v(105);
长度也可不写,即数组为空 ,当然,当心喜提RE。例如:
vector<int> v;
同时,这里还有一个小技巧。如果定义时想让数组全部赋值为同一元素,告别for和memset()!直接在长度后面跟上要赋值的元素即可!例如:
vector<string> v(105,"NoonMaple"); //午枫老师我真的不是故意的
二、访问
其实与普通数组相同,格式为数组名[下标],例如:
#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.尾部插入
可使用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
如果想插入多个:
v.insert(v.begin()+3,{1,1,4,5,1,4}); //从v下标为3的位置开始依次插入1,1,4,5,1,4
四、删除
1.尾部删除
可使用vector内置的 pop_back() 函数,格式为v.pop_back(),如:
v.pop_back(); //删除最后一个元素
2.中间删除
可使用vector内置的 erase() 函数,格式为v.erase(v.begin()+idx),如:
v.erase(v.begin()+3); //删除v中下标为3的元素
如果需要区间删除 (取头不取尾):
v.erase(v.begin()+3,v.begin()+5); //删除下标3~4的元素
五、排序
sort()应该基本都会,那不多说了
sort(v.begin(),v.end(),cmp); //cmp是自定义函数。注意一定是迭代器,跟原始数组不同!
六、查找
可使用算法库中的 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所在的下标
七、其他美妙的小函数
1.v.clear(); //清空所有数据
2.v.size(); //获取数组长度
3.v.empty(); //判断数组是否为空
4.v.begin(); //数组第一个有效数据位置的迭代器
5.v.end(); //数组最后一个有效数据位置 +1 的迭代器
......
欢迎大家在下面为本贴留言补充!
全部评论 7
d
2025-09-21 来自 浙江
1vector 函数确实多,除了定义长点都挺好
2025-09-20 来自 上海
1找到你了
2025-09-07 来自 浙江
1d
2025-09-07 来自 浙江
1六六六
2025-10-07 来自 浙江
0
总结:vector nb,用vector
2025-08-31 来自 上海
1附议
2025-08-31 来自 浙江
1
d
2025-08-30 来自 浙江
1告别for和memset(),直接使用fill()!!!!
2025-08-26 来自 广东
12025-08-26 来自 浙江
1(大惊)fill()你都不知道

2025-08-26 来自 广东
1自己上网查吧

2025-08-26 来自 广东
1




















有帮助,赞一个