是STL容器中的一种常用的容器,由于其大小(size)可变,常用于数组大小不可知的情况下来替代数组。vector容器与数组十分相似,被称为动态数组。时间复杂度为O(1)。
数组数据通常存储在栈中,vector数据通常存储在堆中。
动态扩展不是在原空间后加入空间,而是寻找更大空间,将数据拷贝新空间,释放新空间。
头文件:#include <vector>
迭代器类似于指针,提供了对象的间接访问,但获取迭代器并不是使用取地址符。如果将指针理解为元素的“地址”,那么迭代器可以理解为元素的“位置”。可以使用迭代器访问某个元素,迭代器也能从一个元素移动到另一个元素。
一个迭代器的范围由一对迭代器表示,分别为 begin 和 end。其中 begin 成员返回指向第一个元素的迭代器;end 成员返回容器最后一个元素的下一个位置(one past the end),也就是指向一个根本不存在的尾后位置。
vector初始化
vector<T> v1 创建一个名为v1是元素类型为T的空vector
vector<int> v2 (n): 创建一个vector,元素类型为int,元素个数为n,值默认为0
vector<int> v3 {1,2,3,4,5} vector有5个数,注意花括号
vector<int>v4 (4,1) vector由4个值为1组成
vector<int>v5 (v4) 将v4所有值复制到v5中
vector<int>v6(v3.begin(), v3.end()) 将v3的值从头到尾复制到v6
vector<int>v7(v3.rbegin(), v3.rend()) 将v3的值从尾到头复制到v7
cbegin 和begin()功能相同,在其基础上增加了 const 属性,不能用于修改元素。
cend 和end()功能相同,在其基础上增加了 const 属性,不能用于修改元素。
crbegin 和rbegin()功能相同,在其基础上增加了 const 属性,不能用于修改元素。
crend 和rend()功能相同,在其基础上增加了 const 属性,不能用于修改元素。
vector方法
v2.empty() 判断v2是否为空,为空返回true,否则返回false
v2不为空,返回3
if(v2.empty()) {
return 2;
}else{
return 3;
}
元素长度
v2.size() 返回实际v2中的元素个数
int len = v2.size();
v2.capacity()返回v2中可以容纳的元素个数
区分:capacity 当前vector分配的大小,size 当前使用数据的大小
v2.resize()改变v2中的实际元素个数<