STL各種數據結構及其底層實現

STL各種數據結構及其底層實現

  • vector:底層數據結構爲數組 ,支持快速隨機訪問 。擴容規則爲:當我們新建一個vector的時候,會首先分配給他一片連續的內存空間,如std::vector<int> vec,當通過push_back向其中增加元素時,如果初始分配空間已滿,就會引起vector擴容,其擴容規則在gcc下以2倍方式完成:首先重新申請一個2倍大的內存空間;然後將原空間的內容拷貝過來;最後將原空間內容進行釋放,將內存交還給操作系統。根據vector的插入和刪除特性,以及擴容規則,我們在使用vector的時候要注意,在插入位置和刪除位置之後的所有迭代器和指針引用都會失效,同理,擴容之後的所有迭代器指針和引用也都會失效。
  • list: 底層數據結構爲雙向鏈表,支持快速增刪。
  • deque:底層數據結構爲一箇中央控制器和多個緩衝區,詳細見STL源碼剖析P146,支持首尾(中間不能)快速增刪,也支持隨機訪問,deque是一個雙端隊列(double-ended queue),也是在堆中保存內容的.它的保存形式如下:[堆1] --> [堆2] -->[堆3] --> ...,每個堆保存好幾個元素,然後堆和堆之間有指針指向,看起來像是list和vector的結合品。
  • stack:底層一般用list或deque實現,封閉頭部即可,不用vector的原因應該是容量大小有限制,擴容耗時
  • queue: 底層一般用list或deque實現,封閉頭部即可,不用vector的原因應該是容量大小有限制,擴容耗時 ((stack和queue其實是適配器,而不叫容器,因爲是對容器的再封裝)
  • priority_queue:底層數據結構一般爲vector爲底層容器,堆heap爲處理規則來管理底層容器實現。
  • set:底層數據結構爲紅黑樹,有序,不重複
  • multiset: 底層數據結構爲紅黑樹,有序,可重複 (重複是指關鍵字重複)

  • map:底層數據結構爲紅黑樹,有序,不重複

  • multi:底層數據結構爲紅黑樹,有序,可重複

  • hash_set:底層數據結構爲hash表,無序,不重複

  • hash_multiset:底層數據結構爲hash表,無序,可重複

  • hash_map:底層數據結構爲hash表,無序,不重複

  • hash_multimap:底層數據結構爲hash表,無序,可重複

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