STL之七 STL各種容器的使用時機詳解

2021-07-10 08:54:29 字數 1151 閱讀 3169

c++標準程式庫提供了各具特長的不同容器。現在的問題是:該如何選擇最佳的容器類別?下表給出了概述。

但是其中有些描述可能不一定實際。例如:如果你需呀處理的元素數量很少,可以虎落複雜度,因為線性演算法通常對元素本身的處理過程比較快,這種情況下,「顯性複雜度搭配快速的元素處理」要比「對數複雜度搭配慢的元素處理」來得划算。

作為對上表的補充,使用時:

1.預設情況下應該使用vector。vector的內部結構最簡單,並允許隨機訪問,所以資料的訪問十分方便靈活,資料的處理也夠快。

2.如果經常要在序列頭部和尾部安插和移除元素,應該採用deque。如果你希望元素被移除時,容器能夠自動縮減記憶體,那麼你也應該採用deque。此外,由於vector通常才有用乙個記憶體區塊來存放元素,而deque採用多個區塊,所以後者可內含更多元素。

3.如果需要經常在容器的中段執行元素的安插、移除和移動,可考慮使用list。list提供特殊的成員函式,可以在常數時間內將元素從a容器轉移到b容器。但由於list不支援隨機訪問,所以如果只要知道list的頭部卻要造訪list中的元素,效能會大打折扣。

和所有「以節點為基礎」的容器相似,只要元素還是容器的已不復,list就不會令指向那些元素的迭代器失效。vector則不然,一旦超過其容量,它的所有iterators,pointers.references都會失效;執行安插或移除操作時,也會令一部分iterators、pointers、references失效。至於deque,當它的大小改變,所有iterators,pointers,references都會失效。

4.如果你要的容器是這種性質:每次操作若不成功,便無效用,那麼你應該選用list,或是採用關聯式容器。

5.如果你經常需要根據某個準則來搜尋元素,那麼應當使用「以該排序準則對元素進行排序」的set或multiset。記住,理論上,面對1000個元素的排序,對數複雜度比線性複雜度好10倍。就搜尋速度而言,hash table通常比二叉樹還要快5-10倍。但是hash table的元素並未排序,所以如果元素必須排序,它就用不上了。

6.如果想處理key/value pair,請採用map或multimap。

7.如果需要關聯式陣列,應採用map。

8.如果需要字典結構,應採用multimap。

STL 各種容器

c stl 的實現 1.vector 底層資料結構為陣列 支援快速隨機訪問 2.list 底層資料結構為雙向鍊錶,支援快速增刪 3.deque 底層資料結構為乙個 控制器和多個緩衝區,詳細見stl原始碼剖析p146,支援首尾 中間不能 快速增刪,也支援隨機訪問 4.stack 底層一般用23實現,封...

STL各種容器的區別

容器名名稱 資料結構 效能備註 string 通用字串庫 連續存放的記憶體塊 有保留記憶體 堆中分配記憶體 高效率的隨機訪問 o 1 的訪問時間 在最後增加元素時,一般不需要分配記憶體空間,速度快 在中間或開始操作元素時要進行記憶體拷貝效率低 支援操作 vector 通用向量 陣列 庫 變長一維陣列...

STL中各種容器效率

2.deque 動態陣列 deque支援隨機訪問。在deque的首端和末端插入和刪除元素比較快,在中部插入和刪除則比較慢。deque的記憶體重分配效能比vector好。3.list 雙向鍊錶 list不支援隨機訪問。list在任何位置安插和刪除元素速度都比較快 雙向鍊錶 list的安插和刪除操作不會...