STL | vector的初始化和使用
-
vector
指向量,可以理解为“变长数组
”,长度根据需要而自动改变的数组。有时会碰到普通数组会超过内存的情况,可以使用vector
解决。 - 而且,
vector
可以用来以邻接表的方式存储图,可以解决当节点数太多,无法使用邻接矩阵,又害怕使用指针实现邻接表的时候,使用很简单。
01 vector的初始化
1⃣️ 默认初始化
vector<int> ilist1;
-
vector
为空,size
为0,表明容器中没有元素,而且capacity
也返回 0,意味着还没有分配内存空间。 - 这种初始化方式适用于元素个数未知,需要在程序中动态添加的情况。
二维数组的定义
vector<vector<int> > name;
vector<typename> Arrayname[arraySize];
//区别是第二种的一维长度事先固定了。
2⃣️ 通过同类型的vector进行初始化
vector<int> ilist2(ilist);
vector<int> ilist2 = ilist;
- 这两种方式等价 ,
ilist2
初始化为ilist
的拷贝,ilist
必须与ilist2
类型相同,也就是同为int
的vector
类型,ilist2
将具有和ilist
相同的容量和元素。
3⃣️ 通过迭代器进行初始化
vector<int> ilist3(ilist.begin()+2,ilist.end()-1);
-
ilist3
初始化为两个迭代器
指定范围中元素的拷贝,范围中的元素类型必须与ilist3
的元素类型相容,在本例中ilist3
被初始化为{3,4,5,6}。 - 这种初始化方法特别适合于获取一个序列的子序列。
4⃣️ 带参数的构造函数初始化
vector<int> ilist4(7);
- 默认值初始化,
ilist4
中将包含7个元素,每个元素进行缺省的值初始化,对于int
,也就是被赋值为0,因此ilist4
被初始化为包含7个0。 - 当程序运行初期元素大致数量可预知,而元素的值需要动态获取的时候,可采用这种初始化方式。
5⃣️ 带参数的构造函数初始化
vector<int> ilist5(7,3);
- 指定值初始化,
ilist5
被初始化为包含7个值为3的int
。
6⃣️ 通过数组地址初始化
int a[5]={1,2,3,4,5}
vector<int> vec_i(a,a+5);
02 vector的使用
#include<vector>
vector<int> arr;
arr.push_back(9);//在arr结尾插入数字9
arr.pop_back();//删除arr末尾最后一个项
arr.front();//arr的第一个项的值
arr.back();//arr的最后一个项的值
arr.begin();//arr的第一个项的指针
arr.end();//arr的最后一个项的指针
arr.size();//arr的实际长度
arr.erase(arr.begin(),arr.end());//删除从arr的第一个到最后一个项
arr.insert(arr.begin(),5);//在arr的头之前插入数字5
arr.insert(arr.begin(),6,5);//在arr的头之前插入6个5
arr.empty();//判断arr是否为空
arr.clear();//将arr清空
#include<algorithm>
sort(arr.begin(),arr.end());
//对vector排序
stable_sort(arr.begin(),arr.end());
//对vector稳定排序
reverse(arr.begin(),arr.end());
//反转vector
vector<int>::iterator newend = unique(arr.begin(),arr.end());
//对arr去重,并把去重后的实际个数存在迭代器newend里面
arr.erase(newend,arr.end());
//把从newend到arr最后一项(即重复的数字)去除ces
测试代码
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main(){
cout<<"Vector functions:"<<endl;
vector<int> arr;
arr.push_back(9);
arr.push_back(3);
arr.push_back(5);
arr.push_back(5);
arr.push_back(7);
arr.push_back(5);
arr.push_back(3);
arr.push_back(4);
arr.push_back(2);
arr.push_back(1);
cout<<"arr.push_back() : ";
for(int i = 0;i<arr.size();i++){
cout<<arr[i]<<" ";
}
cout<<endl;
arr.pop_back();
cout<<"arr.pop_back() : ";
for(int i = 0;i<arr.size();i++){
cout<<arr[i]<<" ";
}
cout<<endl;
cout<<"arr.front() : "<<arr.front()<<endl;
cout<<"arr.back() : "<<arr.back()<<endl;
cout<<"arr.size() : "<<arr.size()<<endl;
arr.erase(arr.begin()+4,arr.end());
cout<<"arr.erase() : ";
for(int i = 0;i<arr.size();i++){
cout<<arr[i]<<" ";
}
cout<<endl;
arr.insert(arr.begin(),6,5);
cout<<"arr.insert() : ";
for(int i = 0;i<arr.size();i++){
cout<<arr[i]<<" ";
}
cout<<endl;
cout<<endl<<endl<<"Algorithm functions:"<<endl;
sort(arr.begin(),arr.end());
cout<<"sort():";
for(int i = 0;i<arr.size();i++){
cout<<arr[i]<<" ";
}
cout<<endl;
reverse(arr.begin(),arr.end());
cout<<"reverse():";
for(int i = 0;i<arr.size();i++){
cout<<arr[i]<<" ";
}
cout<<endl;
vector<int>::iterator oldend = arr.end();
vector<int>::iterator newend;
newend = unique(arr.begin(),arr.end());
arr.erase(newend,oldend);
cout<<"unique():";
for(int i = 0;i<arr.size();i++){
cout<<arr[i]<<" ";
}
cout<<endl;
cout<<endl<<endl<<"Vector functions:"<<endl;
cout<<"arr.empty() : ";
if(arr.empty() == false){
cout<<"false"<<endl;
}
else{
cout<<"true"<<endl;
}
arr.clear();
cout<<"arr.clear() : ";
for(int i = 0;i<arr.size();i++){
cout<<arr[i]<<" ";
}
cout<<endl;
cout<<"arr.empty() : ";
if(arr.empty() == false){
cout<<"false"<<endl;
}
else{
cout<<"true"<<endl;
}
}