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)都有用。