STL原始碼剖析筆記

2021-07-11 22:13:23 字數 2218 閱讀 6346

在stl中,迭代器使得容器與演算法分離開來,迭代器會定義五種型別。

hash_table是一種資料結構,和rb_tree類似。其中set、map、multi_set、multi_map都是基於rb_tree。

在stl中,patial_sort()和nth_element()不一樣。patial_sort是的作用是對前n個元素進行排序,這個演算法維持乙個n個元素的堆,對這個堆進行維護。如果是對前n個公升序排序,則維護乙個最大堆,最後對這個堆進行堆排序,使得堆內部有序。如果是對前n個元素降序排序,則維護乙個最小堆,最後對這個堆進行對排序,使得堆內部有序。

nth_element()是尋找第n小的元素(從0開始計算),這個演算法採用的是快速排序的思想,直到找到快速排序的分割區間小於等於3,然後對這個區間採用插入排序獲取結果。

疑問:為什麼

patial_sort()

不採用快速排序的思想,然後採用插入排序?

尋找第n大的元,建議用快速排序類似的思想。尋找

n個最大的元素,根據資料大小和記憶體大小來選擇堆排序還是快速排序,因為快速排序需要較大的記憶體空間,而堆排序只需要維護乙個堆的大小?(劍指

offer有)

在stl中,sort()排序演算法是乙個十分優秀的排序演算法,這種演算法綜合了插入排序、堆排序和快速排序三種演算法的優點。要求是randon_access_iterator。

首先sort()判斷資料長度是否小於等於stl_threshold(一般為16),呼叫插入排序直接進行排序。否則根據選擇的基數來判斷遞迴的深度,如果大於閾值說明基數的選擇不夠理想,導致分層數過大,此時則呼叫堆排序使得排序演算法複雜度穩定在nlogn,正如程式中所看到的partial_sort()函式,這個函式表示排序出前n個元素。否則就呼叫快速排序。值得注意的是,當數量比較大時,最後的分段資料都基本有序,此時呼叫插入排序的效果會比較理想。

在stl中,迭代器使得容器與演算法分離開來,迭代器會定義五種型別。

hash_table是一種資料結構,和rb_tree類似。其中set、map、multi_set、multi_map都是基於rb_tree。

在stl中,patial_sort()和nth_element()不一樣。patial_sort是的作用是對前n個元素進行排序,這個演算法維持乙個n個元素的堆,對這個堆進行維護。如果是對前n個公升序排序,則維護乙個最大堆,最後對這個堆進行堆排序,使得堆內部有序。如果是對前n個元素降序排序,則維護乙個最小堆,最後對這個堆進行對排序,使得堆內部有序。

nth_element()是尋找第n小的元素(從0開始計算),這個演算法採用的是快速排序的思想,直到找到快速排序的分割區間小於等於3,然後對這個區間採用插入排序獲取結果。

疑問:為什麼

patial_sort()

不採用快速排序的思想,然後採用插入排序?

尋找第n大的元,建議用快速排序類似的思想。尋找

n個最大的元素,根據資料大小和記憶體大小來選擇堆排序還是快速排序,因為快速排序需要較大的記憶體空間,而堆排序只需要維護乙個堆的大小?(劍指

offer有)

在stl中,sort()排序演算法是乙個十分優秀的排序演算法,這種演算法綜合了插入排序、堆排序和快速排序三種演算法的優點。要求是randon_access_iterator。

首先sort()判斷資料長度是否小於等於stl_threshold(一般為16),呼叫插入排序直接進行排序。否則根據選擇的基數來判斷遞迴的深度,如果大於閾值說明基數的選擇不夠理想,導致分層數過大,此時則呼叫堆排序使得排序演算法複雜度穩定在nlogn,正如程式中所看到的partial_sort()函式,這個函式表示排序出前n個元素。否則就呼叫快速排序。值得注意的是,當數量比較大時,最後的分段資料都基本有序,此時呼叫插入排序的效果會比較理想。

《STL原始碼剖析學習筆記》

1 演算法泛化過程 首先是模板 適應不同型別 其次是迭代器 具有原生指標行為的類 最後是仿函式 行為類似函式指標,但更適合泛化 泛化的優點 個人總結 1 簡化程式,提高 的可重用性 2 提高了程式的通用性 3 提高了程式的可讀性 4 提高了安全性 函式指標及仿函式 首先說說函式指標,乙個程式可能需要...

《STL原始碼剖析》學習筆記

第二章 空間配置器 allocator 考慮到小型區塊可能造成的記憶體破碎問題,sgi設計了雙層級配置器。當配置區塊超過128bytes時,便呼叫第一級配置器,即直接使用malloc free sgi的第一級配置器的allocate 和realloc 都是在呼叫malloc 和realloc 不成功...

《STL原始碼剖析》筆記 1

第一章 stl概論與版本簡介 一 臨時物件的產生與運用。p36 這裡的臨時物件,指的是一種無名物件 unnamed subjects 如果它們的產生不在程式設計師的預料之下,往往造成效率的負擔,但有時刻意製造臨時物件會讓程式乾淨清爽。刻意製造臨時物件的方法是,在型別名稱後直接加一對小括號,並可指定初...