vector是顺序容器的一种,它是可变长的动态数组,支持随机访问,使用时需要包含头文件vector。
底层实现是数组,线性连续的空间
在vector容器中,根据下标随机访问某个元素的时间是常数,在尾部添加一个元素的时间大多也是常数,在中间插入和删除元素的,要移动多个元素,因此速度较慢,时间复杂度和元素个数成正比。
vector容器在实现时,分配的空间一般大于存放元素所需要的空间。例如:哪怕里面只有一个元素,也会分配32个元素的存储空间,这样在尾部插入元素时,不必每次都重新分配空间,直接写入即可,如果到达现有的最大空间,会触发扩容,在vs下是1.5倍扩容,在gcc下是2倍扩容,扩容后将原来的数据复制过去在添加元素,释放原空间。
vector的操作
//元素类型为T
vector<T> v; //无参构造函数,初始化为空
vector<T> v(n); //有参,初始化为有n个元素
vector<T> v(n,const T& val) //初始化容器为n个元素,每个元素是T类型且值为val
vector(iterator first,iterator last) //first 和 last 可以是其他容器的迭代器。一般来说,本构造函数初始化的结果就是将 vector 容器的内容变成与其他容器上的区间 [first, last) —致
void clear() //删除所有元素
bool empty() //判断是否为空
void pop_back() //删除末尾的元素
void push_back(const T& val) //将val插入末尾
int size(); //返回元素个数
void swap(vector<T> &v) //将自身与另一个同类型的容器互换
iterator erase(iterator i) //删除迭代器i指向的元素,返回值是被删除元素后面的元素的迭代器
T& front() //返回容器中第一个元素的引用
T& back() //返回容器中最后一个元素的引用
vector还可以嵌套形成可变长的二维数组
vector<vector<int>>
用法与普通的二维数组相似;