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