STL序列式容器概述

STL容器分爲序列式和關聯式兩種,序列式容器,其中的元素都可序,但未必有序
這裏寫圖片描述
(heap內含一個vector,priority-queue內含一個heap,stack和queue都內含一個deque)

1.以vector爲底層實現
1.1 vector vector詳情
- vector維護的是一個連續線性空間,支持隨機存取
- 在空間配置時,vector實際配置的大小可能比客戶端需求量更大一些,以備將來可能的擴充
- vector動態增加大小,並不是在原空間之後接續新空間(因爲無法保證原空間之後尚有可供配置的空間),而是以原大小的兩倍另外配置一塊較大空間,然後將原內容拷貝過來,纔開始在內容之後構造新元素,並釋放原空間

1.2 heap
內含一個vector,不提供遍歷功能,也不提供迭代器

相關知識:

  • binary heap:一種complete binary tree(完全二叉樹),除了最底層的葉節點之外,都是填滿的,最底層的葉節點由左至右不得有空隙
  • 根據元素排列方式分爲:
    • max-heap:每個節點的鍵值(key)都大於或等於其葉子節點鍵值(key)。最大值在其根節點,並總是位於底層vector或array的起頭處
    • min-heap:每個節點的鍵值(key)都小於或等於其葉子節點的鍵值(key)。最小值總是在其根節點,並位於的層vector或array的起頭處

相關算法:

  • push-heap算法
  • pop-heap算法
  • sort-heap算法
  • make-heap算法

1.3 priority_queue

  • 是一個擁有權值觀念的queue
  • 在缺省情況下利用max-heap完成
  • 不提供遍歷功能,不提供迭代器

2.以list爲底層實現
2.1 list

  • 每次插入或刪除一個元素就配置或釋放一個元素空間,對於任何位置的元素插入或元素刪除,list永遠是常數時間
  • 不保證在儲存空間中連續存在
  • SGI list是一個環狀雙向鏈表

3.以slist爲底層實現
3.1 slist

  • 單向鏈表
  • 迭代器屬於單向的Forward Iterator
  • 插入、刪除和接合等操作不會造成原有的迭代器失效
  • 插入操作會將新元素插入於指定位置之前

4.以deque爲底層實現
4.1 deque

  • 是由一段一段的定量連續空間構成
  • 一旦有必要在deque的前端或尾端增加新空間,便配置一段定量連續空間,串接在整個deque的頭端或尾端
  • 採用一塊所謂的map(一小塊連續空間)作爲主控。其中每個元素都是指針,指向另一段(較大的)連續線性空間(緩衝區)

4.2 stack

  • 先進後出
  • 只有一個出口
  • SGI STL的stack在缺省情況下以deque作爲底部結構
  • 不提供走訪功能,不提供迭代器

4.3 queue

  • 先進先出
  • 有兩個出口
  • 不允許有遍歷行爲
  • SGI STL的queue在缺省情況下以deque作爲底部結構
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章