如何選擇STL容器?

  大家知道,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容器裏的數據是自動排序的~
















 

 

 

 

 

 

 

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