一文读懂C++ Vector在算法竞赛中的常见用法
Vector相当于对数组的封装,提供了非常丰富的方法,在算法竞赛中能大大节省我们的时间。以下是我在刷题中会使用到的常见Vector用法。注释都写好了。
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> v1; // 定义⼀个vector v1,定义的时候没有分配⼤⼩
cout<<v1.size()<<endl; // 输出 0, 定义时可以不分配大小,之后再用resize分配
v1.resize(10);
cout<<v1.size()<<endl;// 输出 10, 定义时可以不分配大小,之后再用resize分配, 默认元素都为0
for (int i = 0; i < v1.size(); i++) {
cout<< v1[i] << " ";
}
cout<<endl;
//以上循环输出为 0 0 0 0 0 0 0 0 0 0
int n = 5;
vector<int> v2(n); //定义n个大小的数组
for (int i = 0; i < v2.size(); i++) {
cout<< v2[i] << " ";
}
cout<<endl;
//以上循环输出为 0 0 0 0 0
// 在定义的时候就可以对vector变量进⾏初始化
vector<int> v3(n,9); //定义n个大小的数组,且所有数值都初始化为9
for (int i = 0; i < v3.size(); i++) {
cout<< v3[i] << " ";
}
cout<<endl;
//以上循环输出为 9 9 9 9 9
//对于vector的基本操作和数组差不多,但是多了很多方法
v3[0] = 88;
v3[3] = 77;
for (int i = 0; i < v3.size(); i++) {
cout<< v3[i] << " ";
}
cout<<endl;
//以上循环输出为 88 9 9 77 9
//push_back的使用
vector<int> v4; // 定义⼀个v4,定义的时候不需要分配⼤⼩
cout<<v4.size()<<endl; //输出为 0
for (int i = 0; i < 10; i++) {
v4.push_back(i); //在v4的末尾添加⼀个元素i
}
cout<<v4.size()<<endl; //输出为10 v4中的元素为0 1 2 3 4 5 6 7 8 9
//迭代器访问
for (auto it = v4.begin(); it!=v4.end(); it++) {
cout<< *it <<" ";
}
cout<<endl;
//以上循环输出为 0 1 2 3 4 5 6 7 8 9
//vector的其他操作,其实是封装了数据结构中线性表的增删查改等操作
v4.pop_back(); //相当于弹栈,删除最后一个元素 执行后v4中的值为:0 1 2 3 4 5 6 7 8
v4.pop_back();
v4.pop_back();
v4.pop_back();
cout<< *v4.begin() <<endl; //输出0
cout<< *v4.end() <<endl; //输出6
//插入之前v4的值为 0 1 2 3 4 5
auto i = v4.insert(v4.begin(),99); //在v4的begin的位置插入一个元素为99 返回插入元素的位置的迭代器
cout<< *i <<endl; //输出99 此时v4的值为 99 0 1 2 3 4 5
auto i2 = v4.erase(v4.begin()+1);//删除下标为1的值,并把删除的位置迭代器返回
cout<< *i2 <<endl; //输出1 此时v4的值为 99 1 2 3 4 5
//查和改直接使用【】就行就不再演示了
for (auto it = v4.begin(); it!=v4.end(); it++) {
cout<< *it <<" ";
}
cout<<endl;
//以上循环输出为 99 1 2 3 4 5
return 0;
}