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

posted @ 2018-11-01 16:34  AKMer  阅读(2309)  评论(0编辑  收藏  举报