STL中Vector和List的底層資料結構

2022-03-08 15:32:49 字數 789 閱讀 6317

摘要:本文列出幾個基本的stl map和stl set的問題,通過解答這些問題講解了stl關聯容器內部的資料結構,最後提出了關於unix/linux自帶平衡二叉樹庫函式和map, set選擇問題,並分析了map, set的優勢之處。對於希望深入學習stl和希望了解stl map等關聯容器底層資料結構的朋友來說,有一定的參考價值。

vector(向量)——stl中標準而安全的陣列。只能在vector 的「前面」增加資料。

deque(雙端佇列double-ended queue)——在功能上和vector相似,但是可以在前後兩端向其中新增資料。 

list(列表)——游標一次只可以移動一步。如果你對鍊錶已經很熟悉,那麼stl中的list則是乙個雙向鍊錶(每個節點有指向前驅和指向後繼的兩個指標)。

set(集合)——包含了經過排序了的資料,這些資料的值(value)必須是唯一的。

map (對映)——經過排序了的二元組的集合,map中的每個元素都是由兩個值組成,其中的key(鍵值,乙個map中的鍵值必須是唯一的)是在排序或搜尋時使用,它的值可以在容器中重新獲取;而另乙個值是該元素關聯的數值。比如,除了可以ar[43] = "overripe"這樣找到乙個資料,map還可以通過ar["banana"] = "overripe"這樣的方法找到乙個資料。如果你想獲得其中的元素資訊,通過輸入元素的全名就可以輕鬆實現。

multiset(多重集)——和集合(set)相似,然而其中的值不要求必須是唯一的(即可以有重複)。

multimap(多重對映)——和對映(map)相似,然而其中的鍵值不要求必須是唯一的(即可以有重複)。

STL中的vector與list插入資料速度比較

對於忘list中插入資料,很好理解,分配乙個新的結點空間,新增到鍊錶尾部即可 對於往vectorz中新增資料,需要判斷當前控制項是否夠用,不夠用的話需要再次分配稍大的一些空間,然後把已有的元素拷貝到新的空間區域,然後釋放已有的空間。也許有人覺得這個拷貝操作很費時,覺得沒有list新增的速度快,然而,...

C 中vector和list排序

容器 泛型演算法 和類是不是就是c 相對於c 的那部分呢?暫時先這麼認為吧。如果這篇部落格有幸被別人看到,請幫忙指出。c 菜鳥 留。vector的迭代器是隨機訪問迭代器,支援泛型演算法的sort及其演算法。vector排序 include include include include includ...

C 中vector和list區別

記憶體空間 vector和陣列類似,記憶體空間是連續的,並且其實位址不變 list是由雙向鍊錶實現的,記憶體空間是不連續的。訪問 vector能夠進行高效的隨機訪問操作,時間複雜度為o 1 list是通過指標訪問資料,不能進行隨機訪問,時間複雜度是o n 插入 刪除 vector因位址時連續的,進行...