容器的概觀與分類
常用的資料結構不外乎array(陣列)、list(鍊錶)、tree(樹)、stack(堆疊)、queue(佇列)、hash table(雜湊表)、set(集合)、map(對映)等等。
根據"資料再容器中的排列"特性,這些資料結構分為序列式和關聯式。
vector概述
vector的資料安排以及操作方式,與array非常相似。兩者的唯一差別在於空間的運用的靈活性。array是驚呆空間。而vector是動態的。
vector的迭代器
vector維護的是乙個連續線性空間。無論其元素型別為何,普通指標都可以作為vector的迭代器滿足所有條件。支援各種運算。
vector的資料結構
vector所採用的資料結構非常簡單:線性連續空間。它以兩個迭代器start和finish分布指向配置得來的連續空間中已經被使用的範圍。
乙個vector的容量永遠大於或等於其大小。增加新元素時,如果超過當時的容量,則容量會擴充至兩倍。容量的擴張必須經歷"重新配置。
元素移動、釋放原空間"等過程。
vector預設使用alloc作為空間配置器,並據此另外定義了乙個data_allocator,為的是更方便以元素大小為配置單位。
vector的元素操作:pop_back, erase, clear, insert
list概述
相較於vector的連續線性空間, list就顯得複雜許多,它的好處是每次插入或刪除乙個元素,就配置或釋放乙個元素空間。
因此,list對空間的運用有絕對的精準,一點都不浪費。而且,對於任何位置的元素插入或元素移除,list永遠都是常熟時間。
list和vector是兩個最常被使用的容器,什麼實際下最適合使用哪一種容器,必須視元素的多寡,元素訪問行為的特性耳釘。
list不能夠像vector一樣以普通指標作為迭代器。因為其節點不保證在儲存空間中連續存在。
list有乙個重要性質:插入操作和接合操作都不會造成原有的list迭代器失效。這在vector是不成立的。
可以更改alloc配置器,使鍊錶變成雙向鍊錶。
list元素操作:push_front, push_back, erase, pop_front, pop_back, clear, remove, unique, splice, merge, reverse, sort
list這一部分真的是博大精深。讓人看得欲罷不能。讀者可以考慮自己看侯捷先生寫的stl剖析。
deque概述
deque是一種雙向開口的連續線性空間。可以在頭尾兩端分別做元素插入和刪除操作。
deque和vector的最大差異:
1. deque允許常數時間內對頭端進行元素插入或移除操作。
2.在於deque沒有容量觀念,因為它是動態地以分段連續空間組合而成,隨時可以增加一段新的控制項並鏈結起來。
deque的迭代器很複雜。
deque採用一塊所謂的map作為主控。這裡所謂map是一塊連續空間。、,其中每個元素都是乙個指標,指向另一端
連續的線性空間,稱為緩衝區。緩衝區才是deque的儲存空間主題。
deque是分段連續空間。維持其"整體連續"假象的人物,落在了迭代器的operator++和operator--兩個運運算元身上。
queue概述
queue是一種先進先出的資料結構。它有兩個出口。queue允許新增元素、移除元素、從最低端加入元素、取得最頂端
元素。這個結構用來做訊息佇列真的是太方便了。
queue沒有迭代器。
queue是以list容器作為底層容器。
binary heap是一種完全二叉樹。可以通過heap演算法來排序。
heap沒有迭代器。
STL之序列式容器 一 什麼是序列式容器
序列容器以線性序列的方式儲存元素。它沒有對元素進行排序,元素的順序和儲存它們的順序相同。一般來說,有 5 種標準的序列容器,每種容器都具有不同的特性 現在我們來說說序列式容器到底是什麼。所謂序列容器,即以線性排列 類似普通陣列的儲存方式 來儲存某一指定型別 例如 int double 等 的資料,需...
STL 序列式容器細節
stl 序列式容器細節 一 概論 1 序列式容器 array build in c 內建 vector heap內含乙個vector priority queue內含乙個heap list slist deque stack內含乙個deque queue內含乙個deque 2 關聯式容器 rb tr...
STL序列式容器 heap
stl heap主要有以下幾種操作組成 make heap,建堆 sort heap,堆排序 pop heap,取出堆頂元素 push heap,調整堆 heap並不歸屬於stl容器元件,它是個幕後英雄,扮演priority queue的助手。binary max heap適合作為priority ...