sgi stl 特性萃取器

2021-07-04 04:13:35 字數 1762 閱讀 6787

1 迭代器相關型別的萃取(iterator_traits)

許多演算法,如查詢,指標移動等都傳遞的是迭代器,而不同迭代器的型別決定了其演算法操作過程的差異

template struct iterator_traits ;

針對原生指標型別,常量指標型別的的迭代器的萃取偏化版本,注意指標型別的迭代器是隨機訪問的迭代器

template struct iterator_traits;

template struct iterator_traits;

萃取函式(注意版本函式呼叫時不需要模板說明)

萃取迭代器本身型別

inline typename iterator_traits::iterator_category

iterator_category(const iterator&)

注意萃取操作是領用 int()建立臨時物件的方法

萃取迭代器間距型別:指標型別

template inline typename iterator_traits::difference_type*

distance_type(const iterator&)

萃取迭代器所指型別:以指標進行標識

template inline typename iterator_traits::value_type*

value_type(const iterator&)

2__type_traits資料型別的特性萃取器

意在萃取資料型別是否是pod資料型別,是否擁有trivial建構函式,拷貝函式等,賦值=,析構

基本型別,保證最低級別的設定

template struct __type_traits ;

其後為偏化版本,包括了全部的built-in 型別,與原生指標型別

template struct __type_traits;

例項:給定迭代器的範圍,首先萃取出迭代器所指即容器元素型別,其後根據型別判斷類別是否有必要呼叫建構函式進行物件的析構過程

// 利用 value_type 萃取容器元素型別,注意型別以指標標識

template inline void

__destroy_aux(forwarditerator first, forwarditerator last, __false_type)

利用 __type_traits 萃取型別是否有必要的析構函式

template inline void __destroy_aux(forwarditerator, forwarditerator, __true_type) {}

// 有必要的析構函式, 對每乙個元素進析構

template inline void __destroy(forwarditerator first, forwarditerator last, t*)

// 沒有必要的析構函式不用處理template

template inline void destroy(forwarditerator first, forwarditerator last)

ref:stl原始碼剖析

SGI STL 迭代器實現

迭代器模式 該模式能夠提供一種方法,使之能夠依序尋訪某個聚合物 容器 所含的每個元素,而又無需暴露該聚合物的內部表達方式。stl原始碼剖析 它其實就是演算法與容器的一種粘膠劑。迭代器的行為非常類似智慧型指標 smartpointer 所以對他來說最重要的便是deference 內容提領 和membe...

SGI STL 迭代器解析

整理至侯捷 stl原始碼剖析 迭代器是一種設計模式,現在程式語言基本都語言層面支援了這種模式,定義如下 提供一種方法,使之能遍歷聚合物 容器 中的各個元素,而又不暴露聚合物內部的實現細節。在stl中,迭代器在容器和演算法之間扮演著橋梁的作用,演算法通過迭代器訪問容器中的資料。迭代器要實現下面幾個功能...

SGI STL空間配置器和記憶體池

最近在看侯捷老師的 stl原始碼剖析 非常感嘆其中空間配置器實現的巧妙和細緻,對效率真正是錙銖必較。一般我們所習慣的記憶體配置和釋放是通過new和delete來完成的,而new運算包含了兩個階段 1.呼叫 operator new配置記憶體 2.呼叫建構函式 foo 構造物件。delete運算也包含...