vector向量容器屬於第一類容器,支援隨機訪問迭代器,與陣列不同的是,向量容器在記憶體用盡時,會自動分配更大的連續記憶體區,將原來的元素複製到性的記憶體區中,並釋放舊的記憶體區。
vector
實際上相當於乙個動態的陣列,隨機訪問的時間為常數,在尾部新增速度很快,但是在中間插入元素時速度會變慢,這一點跟對陣列的操作是一樣的,中間插值會設計到資料的移動。
(一)在定義vecotr
時,需要給定乙個具體的實參型別,例如:
vectorv; //定義乙個
int型別向量容器物件
v,不指定元素個數
vectorv(10); //定義乙個
float
型別向量容器物件
v,指定元素個數為10
vectorv(10,
8.6); //
定義乙個
float
型別向量容器物件
v,指定元素個數為
10,每個的初值為
8.6。
(二)在尾部新增新增元素:
vectorv;
v.push_back(2);
v.push_back(3);
v.push_back(1);
對於在尾部插入元素,vector
中元素地儲存順序與插入順序保持一致,此時
v中的元素順序為:
2 3 1。
若事先定義了vector
的大小,使用中插如元素的個數超過了原有的大小,
vector
會自動擴充套件儲存空間的長度。
vectorv(3);
v.push_back(1);
v.push_back(2);
v.push_back(3);
v.push_back(4); //向量容器會自動擴充套件長度
原來定義的vector
大小為3
,當插入
4時,容器自動擴充套件長度,此時
v中資料位
1 2 3 4。
(三)vector中元素的訪問方式 (1
)下標方式,隨機訪問,使用下標運算子
[ ],
下標從0
到n-1;
vectorv(3);
v[0]=1; v[1]=2;v[2]=3
(2)使用迭代器訪問:
首先定義迭代器物件it
即vector::iterator it
然後使用迭代器進行容器遍歷(順序訪問)
for(it=v.begin();it!=v.end();it++)
*it;
(四)vector中刪除元素 (1
)部分刪除:
erase(位置
) 刪除單個元素
erase(位置
1,位置
2)
刪除區域內的多個元素,位置用迭代器表示,不是下標 (2
)全部刪除:
clear()
(五)vector
中元素的個數 (1
)size()
:返回乙個
int,及元素的個數 (2
)empty()
:返回乙個邏輯值,真或假(1或
0),為空返回真。
(六)若使用stl
中的演算法對
vector
中的元素進行排序時,需選新增
標頭檔案
(1)反向排列演算法
reverse(位置
1,位置
2):將
vector
中的元素逆序儲存
eg: vectorv; reverse(v.begin(),v.end());
(2)排序演算法
sort(位置
1,位置2);
sort(位置
1,位置
2,比較函式);
注:sort
函式預設是按從小到大的順序排列元素,按照第二種形式自定義比較函式,按降序排列或者按照多個關鍵字的順序排列。
sort
實際上是快速排序,時間複雜度
o(n*log(n))
;平均效能最優。但是最壞的情況下,效能可能非常差。如果要保證「最壞情況下」的效能,那麼可以使用
stable_sort
,stable_sort
實際上是歸併排序(將兩個已經排序的序列合併成乙個序列),特點是能保持相等元素之間的先後次序在有足夠儲存空間的情況下,複雜度為
n * log(n)
,否則複雜度為
n * log(n) * log(n)
。stable_sort
用法和
sort
相同,排序演算法要求隨機訪問迭代器的支援,所以
list
不能使用排序演算法,要使用
list::sort。
(六)選用vector (1
)在需要使用陣列的情況下,可以考慮使用
vector;
(2)需要豐富的操作; (3
)無需考慮容器大小,容器自動擴張。
ACM學習歷程8 Vector應用
vectors 包含著一系列連續儲存的元素 其行為和陣列類似。訪問 vector 中的任意元素或從末尾新增元素都可以在常量級時間複雜度內完成,而查詢特定值的元素所處的位置或是在 vector 中插入元素則是線性時間複雜度。應用舉例一 輸入資料 含有不多於50 個的正整數n 0 n 46 輸出數 對於...
ACM學習歷程7 Vector向量容量擴充套件機制
vector向量容器相當於乙個動態的陣列,當向向量容器中不斷加入元素,若超過容器本身的大小限制,vector 會自動拓展大小,在這過程中涉及到記憶體的分配和 在vector 中有size 和capacity 函式,與之相對應的兩個函式 resize size type 和reserve size t...
ACM學習歷程29 搜尋演算法
搜尋演算法是利用計算機的高效能來有目的地窮舉乙個問題的部分或所有的可能情況,從而求出問題的解的一種方法。搜尋過程實際上是根據初始條件和擴充套件規則構造一棵解答樹並尋找符合目標狀態的節點的過程。涉及到的概念包括 狀態 狀態轉移 搜尋樹 狀態空間 可行解 最優解。一 相關概念 狀態 對問題以及事物狀態在...