STL——vector数组
-
概念:“向量”
理解为变长数组,可根据实际需要自动改变长度的数组 -
定义:
vector<typename> name;
vector<int> a;
定义一个数组int a[size],长度可变,其中,typename可以是任何基本类型,也可以是STL标准容器,如vector、set、queue等。
当typename为STL容器时,>>之间要加空格vector<vector<int> > name;
-
头文件:
#include<vector>
using namespace std; //都必须有
-
vector数组定义:
vector<int> vi[10]
,定义一个从vi[0]—vi[9],每一维都可变长度的二维数组 -
元素访问:下标访问;迭代器访问
-
vector常用函数:
push_back(元素值): vector后面添加一个元素,复杂度O(1)
pop_back( ): vector后面删除一个元素,复杂度O(1)
size(): vector容器元素个数,复杂度O(1)
clear(): 清空所有元素
#include<iostream>
#include<vector>
using namespace std;
int main(){
int num;
vector<int> a; //定义vector变长数组
for(int i=1;i<=3;i++){
cin>>num;
a.push_back(num); //依次录入三个数并放入vector中
}
a.pop_back(); //将最后一个元素删去
int length=a.size(); //求现在数组长度
for(int i=0;i<length;i++){
cout<<a[i]<<" "; //输出剩余元素
}
return 0;
}
输入:
4 5 6
输出:
4 5
insert(位置it,元素x): 在迭代器it处插入元素x,复杂度O(N)
erase(位置it): 迭代器it处删除一个元素,复杂度O(N)
erase(起始,结束): 删除 [起始,结束) 间所有元素
所有的位置都可简单理解为下标
#include<iostream>
#include<vector>
using namespace std;
int main(){
int num;
vector<int> a; //定义vector变长数组
for(int i=1;i<=5;i++){
cin>>num;
a.push_back(num); //依次录入1 2 3 4 5三数入vector
}
a.insert(a.begin()+2, 0); //1 2 0 3 4 5
a.erase(a.begin()+1); //1 0 3 4 5
a.erase(a.begin()+3, a.begin()+5); //1 0 3,若3——5,则为1 0 3 5
for(int i=0;i<a.size();i++){
cout<<a[i]<<" "; //输出剩余元素
}
return 0;
}
- 常见用途:
- 在数组元素个数不确定时当做数组使用,节省空间
- 当输出元素个数未知时,为方便最后一个元素输出后没有空格,可以将元素先放入vector中,再输出
- 存储邻接表,避免使用指针