#include <vector>
vector
\(vector\)可以理解成动态数组,动态占用空间,动态释放空间。
声明方式
vector<int> a;
vector<int>::iterator it;
\(vector\)支持任意访问,跟数组一样直接调用下标。但是不支持任意插入,只支持在末端插入。\(vector\)动态占用空间和释放空间都是二的若干次方的占用和释放,也就是若实际占用等于最大占用,最大占用空间将翻一倍。如果实际占用空间低于最大占用空间的\(\dfrac{1}{4}\),那么最大占用空间就会变成原来的一半。所以\(vector\)比数组慢得多。接下来我们以保存\(int\)类型的数据的\(vector\)为例:
a.size()
返回\(a\)的实际长度。
a.empty()
返回一个\(bool\)类型,表示\(a\)是否为空。
a.clear()
把\(a\)全部清空。
迭代器
\(vector\)的迭代器支持随机访问,可以让迭代器加上一个整数,与指针的移动类似。把两个迭代器相减会返回这两个迭代器之间的距离。
a.begin()/a.end()
返回\(a\)的首迭代器和尾迭代器,尾迭代器为空。
a.front()/a.back()
返回\(a\)的第一个元素和最后一个元素,等价于a[0]/a[a.size()-1]。
a.push_back(x)/a.pop_back()
把\(x\)插入\(a\)的尾端/弹出\(a\)尾端的元素。
遍历a的两种方法
for(int i=0;i<a.size();i++)
cout<<a[i]<<endl;
for(vector<int>::iterator it=a.begin();it!=a.end();it++)
cout<<*it<<endl;
第一种复杂度为\(O(n^2)\)
第二种方法对大多数\(stl\)都有用。