如何選擇STL容器?

2021-05-25 06:06:53 字數 2181 閱讀 9307

大家知道,c++的stl標準庫很好用,裡面的vector,list,deque,stack,slist,set,map,都很好用。但是,在實際程式設計過程中,如何根據自己的專案需求選擇裡面的一種容器呢?

最好的辦法就是了解其中的原理,然後做選擇。(補充,如果專案中不考慮效率,就不用考慮那麼多了~畢竟stl從頭到尾都考慮了效率問題。)

vector

vector的基本原理如下:

它採用線性空間儲存資料。如果空間不夠,則另外分配新的兩倍大小的空間,然後把舊空間釋放掉。

可以看出:

①vector不適合push_front(效率很低)

②vector不適合中間插入刪除操作。中間插入刪除操作會引起記憶體拷貝。

list

list的原理如下:

list採用非線性的空間儲存資料。

①list適合插入刪除頻繁的場所。不管插入還是刪除,時間基本上都是常數。

②list不適合隨機線性訪問。

deque

deque基本原理:

deque採用類似檔案系統的方式儲存資料。其中有數個連續空間的緩衝區儲存資料。這些緩衝區連線起來,給上層使用者乙個假象就是,儲存的資料空間是連續的。

deque是list和vector的折中方案。兼有list的優點,也有vector隨機線性訪問效率高的優點。

①deque仍舊不適合中間插入刪除操作。

②deque適合線性隨機訪問資料。

stack

stack是deque的一種變種,優缺點不變。

queue(佇列)

queue是deque的一種變種,優缺點不變。

heap

heap的實現原理如圖:

heap容器採用二叉樹儲存資料。所以heap容器適合經常排序的場所。heap容器裡的資料是自動排序的~

STL容器選擇

個人筆記 1 預設狀態下應該選擇vector,因為vector內部結構最簡單,並允許隨機訪問,所以資料的訪問十分方便,資料的處理也快。2 如果經常要在頭部和尾部安插和移動元素,應該採用deque,如果希望元素被移除時,容器能夠自動縮減記憶體,也應該使用deque。3 如果經常在容器的中段執行元素的安...

STL之如何選擇順序容器

一 順序容器的分類 順序容器 vector向量 list鍊錶 deque雙端佇列 優先順序最高的是vector向量,它的速度比較快,優點最多 在程式設計中,容器可以切換 1 include 2 include 3 include 4 include 5 6using namespace std 78...

STL容器的選擇

標準stl序列容器 vector string deque和list。標準stl關聯容器 set multiset map和multimap。非標準序列容器slist和rope。slist是乙個單向鍊錶,rope本質上是乙個重型字串。繩子 rope 是重型的 線 string 明白了嗎?你可以找到乙...