STL底層原理簡介

2021-12-29 16:33:31 字數 1016 閱讀 6114

stl的sort()演算法,資料量大時採用quick sort,分段遞迴排序。一旦分段後的資料量小於某個閾值,為避免quick sort的遞迴呼叫帶來過大的額外開銷,就改用insertion sort(插入排序)。如果遞迴層次過深,也就是說資料量過大,比如說有10億個數,還會改用heap sort。

底層資料結構為陣列 ,變長,支援快速隨機訪問

底層資料結構為陣列,定長,支援快速訪問

雙端佇列的資料被表示為乙個分段陣列,容器中的元素分段存放在乙個個大小固定的陣列中,此外容器還需要維護乙個存放這些陣列首位址的索引陣列

由於分段陣列的大小是固定的,並且它們的首位址被連續存放在索引陣列中,因此可以對其進行隨機訪問,但效率比vector低很多。

向兩端加入新元素時,如果這一端的分段陣列未滿,則可以直接加入,如果這一端的分段陣列已滿,只需建立新的分段陣列,並把該分段陣列的位址加入到索引陣列中即可。無論哪種情況都不需要對已有元素進行移動,因此在雙端佇列的兩端加入新的元素都具有較高的效率。

當刪除雙端佇列容器兩端的元素時,由於不需要發生元素的移動,效率也是非常高的。

雙端佇列中間插入元素時,需要將插入點到某一端之間的所有元素向容器的這一端移動,因此向中間插入元素的效率較低,而且往往插入位置越靠近中間,效率越低。刪除佇列中元素時,情況也類似,由於被刪除元素到某一端之間的所有元素都要向中間移動,刪除的位置越靠近中間,效率越低。

佇列,使用list或deque實現,封閉一端即可,不用vector的原因應該是容量大小有限制,擴容耗時

棧,使用list或者deque實現,封閉一端即可

單向鍊錶,底層資料結構為鍊錶

雙向鍊錶,底層資料結構為鍊錶

底層資料結構為紅黑樹(一種二叉查詢樹,2-3樹改進而來),有序,不重複

底層資料結構為紅黑樹,有序,可重複

底層資料結構為紅黑樹,有序,不重複

底層資料結構為紅黑樹,有序,可重複

iterator 只有vector和array這種支援快速隨機訪問的容器支援iterator+n的這種運算,其他的容器可以使用std:advance(iterator,n)

STL底層原理簡介

stl的sort 演算法,資料量大時採用quick sort,分段遞迴排序。一旦分段後的資料量小於某個閾值,為避免quick sort的遞迴呼叫帶來過大的額外開銷,就改用insertion sort 插入排序 如果遞迴層次過深,也就是說資料量過大,比如說有10億個數,還會改用heap sort。底層...

STL底層實現

1.vector 底層資料結構為陣列 支援快速隨機訪問 2.list 底層資料結構為雙向鍊錶,支援快速增刪 3.deque 底層資料結構為乙個 控制器和多個緩衝區,詳細見stl原始碼剖析p146,支援首尾 中間不能 快速增刪,也支援隨機訪問 deque是乙個雙端佇列 double ended que...

STL容器底層原理及容器操作總結

最近在總結c 的一些知識,所有內容都來自 vector vector的資料結構 單向開口線性連續空間。迭代器就是乙個普通指標,random access iterator 注意 對vector的任何操作,一旦引起空間重新配置,指向原vector的所有迭代器就都失效了。list list的資料結構 l...