STL容器效率比較

轉載自:

STL容器效率比較


1、vector

變長一維數組,連續存放的內存塊,有保留內存,堆中分配內存;

支持[]操作,高效率的隨機訪問;

在最後增加元素時,一般不需要分配內存空間,速度快;在中間或開始操作元素時要進行內存拷貝效率低;

vector高效的原因在於配置了比其所容納的元素更多的內存,內存重新配置會花很多時間;

注:需要高效的隨即存取,而不在乎插入和刪除使用vector。

 

2、list

雙向鏈表,內存空間上可能是不連續的,無保留內存,堆中分配內存;

不支持隨機存取開始和結尾元素的訪問時間快,其它元素都O(n)

在任何位置安插和刪除元素速度都比較快,安插和刪除操作不會使其他元素的各個pointer,reference,iterator失效;

注:大量的插入和刪除,而不關係隨即存取使用list。

 

3、deque

雙端隊列,在堆上分配內存,一個堆保存幾個元素,而堆之間使用指針連接;

支持[]操作,在首端和末端插入和刪除元素比較快,在中部插入和刪除則比較慢,像是listvector的結合;

注:關心插入和刪除並關心隨即存取折中使用deque。

 

4、set&multiset

有序集合,使用平衡二叉樹存儲,按照給定的排序規則(默認按less排序)對set中的數據進行排序;

set中不允許有重複元素,multiset中運行有重複元素;

兩者不支持直接存取元素的操作;

因爲是自動排序,查找元素速度比較快;
不能直接改變元素值,否則會打亂原本正確的順序,必須先下刪除舊元素,再插入新的元素。

 

5、map&multimap

字典庫,一個值映射成另一個值,使用平衡二叉樹存儲,按照給定的排序規則對map中的key值進行排序;

map中的key值不允許重複,multimap中的key允許重複;

根據已知的key值查找元素比較快;

插入和刪除操作比較慢。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章