注:以下v即代表已初始化好的vector容器
1.描述
几乎可以算是数组的替代品,不过数组是静态空间,vector是动态扩展,但是vector只能从一端操作,也叫单端数组(所以后面会有一个双端数组deque)
注:可以像数组一样取得下标位置元素,也可以用其修改
int a=v[0];
v[0]=1;
注:若嵌套也可以像二维数组一样使用,但是一定要记得分配内存:
vector<vector<int>> v(10);
v[0].resize(1);
v[0][0]=1;
也有内置方法取得,和[]作用一样
int a=v.at(0);
2.初始化
- 直接声明(可以用逗号分隔声明多个)
vector<T> v;
vector<T> v1,v2;
- 直接声明并赋予长度,且默认值为0
vector<T> v(len);
- 复制vector中任意区间
vector(v.begin(),v.end());
vector<int> v1;
vector<int> v;
v.assign(v1.begin(),v1.end());
- n个elem初始化
vector(n,elem);
vector<int> v;
v.assign(3,4);
- 复制另一个
vector(v);
- 数组式初始化vector
vector<int> v={1,2,3};
vector<int> v{1,2,3};
- 数组转vector
int x[3]={1,2,3};
vector<int> v(x,x+3);
- =
vector<int> v2(1,10);
vector<int> v;
v=v2;
注:若写函数中返回值为vector,可直接return数组返回,如:
vector<int> eg(int a,int b)
{
return {a,b};
}
3.内置方法
- 尾插,无返回
v.push_back(10);
- 指定迭代器位置插入单个元素,无返回
v.insert(v.begin(),10);
- 指定迭代器位置插入10个2,无返回
v.insert(v.begin(),10,2);
- 尾删,无返回
v.pop_back();
- 删除迭代器位置元素
v.erase(v.begin());
- 删除迭代器区间元素
v.erase(v.begin(),v.end());
- 全部清空,无返回
v.clear();
- 返回首元素
v.front();
- 返回尾元素
v.back();
- 判空,返bool
if(v.empty()){
}
- 容器大小(容量)
v.capacity()
- 元素个数
v.size()
- 重指定容器大小,长则默认填充0,或者指定后一个参数为默认。短则削去。无返回
v.resize(10)
v.resize(10,2)
- 预留空间
v.reverse(100);
- 容器 互换
v1.swap(v2);
注:一般用来收缩内存,因为很多时候vector用了其他方法后容量依然没变,导致内存占用过多
vector<int>(v1).swap()v1;