iterator模式定義如下:
提供一種方法,使之能夠依序巡防某個聚合物所含的各個元素,而又不暴露該聚合物的內部表示式。
迭代器是一種smart pointer:
舉例auto_ptr
template
class auto_ptr
~auto_ptr()
template
auto_ptr(auto_ptr& rhs):pointee( rhs.release() ){}
template
auto_ptr& operator=(auto_ptr& rhs)
t&operator*()const
t*operator->()const
t*get()const
private:
t* pointee;
迭代器的相應型別:利用function template的引數推導舉例:
template
void func_impl(i iter, t t)
t tmp; //t就是迭代器所指之物的型別
template
inline void func(i iter)
func_impl(iter, *iter);
int main()
int i;
fun(&i);
//引數可以推導,但是函式的返回值無法預知,引入內嵌類別,但是內嵌類別無法區分原生指標
//利用模板偏特化,宣告萃取迭代器的特性的類模板
template
struct iterator_traits{
typedef typename i::value_type value;
多了一層間接性,擁有特化版本,識別原生指標
template
struct iterator_traits{
typedef t value_type;
包括指向常數物件的指標
template
struct iterator_traits{
typedef t value;
difference_type:
template
struct iterator_traits
typedef typename i::difference_type difference_type;
template
struct iterator_traits
typedef ptrdiff_t difference_type;
template
struct iterator_traits
typedef ptrdiff_t difference_type;
指標和引用
template
struct iterator_traits
typedef typename i::pointer pointer;
typedef typename i::reference reference;
template
struct iterator_traits
typedef t* pointer;
typedef t& reference;
template
struct iterator_traits
typedef const t* pointer;
typedef const t& reference;
迭代器:
template
struct iterator_traits{
typedef typename i::iterator_category iterator_category;
template
struct iterator_traits
typedef random_access_iterator_tag iterator_category;
template
struct iterator_traits
typedef random_access_iterator_tag iterator_category;
STL 6 之Traits程式設計技法 與迭代器
traits程式設計技法 stl原始碼鑰匙!特性萃取機 1.traits程式設計技法說白了是利用上篇所用到的偏特化概念來實現的!2.乙個很好地使用就是在迭代器之中 3.為什麼需要?前提是並不是所有的模板型別都是class type,有的是原生指標,有的卻是指向為常型別的指標const t 但是這個時...
STL學習筆記 迭代器以及Traits技術
迭代器模式 提供一種方法,使之能夠依序訪問某個容器中的各個元素,而又無需暴露該容器的內部表述方式。迭代器是容器和演算法之間的膠合劑。1.如何判斷迭代器的型別 1 通過編譯器對函式模版的實參推倒可以解決引數類別的判定,如下 templatevoid func imp1 i iter,t t templ...
STL之迭代器
除了為每個容器定義的迭代器之外,標準庫在標頭檔案iterator中還定義了額外幾種迭代器,包括 1 插入迭代器 insert iterator 被繫結到乙個容器上,可用來向容器插入元素。2 流迭代器 stream iterator 被繫結到輸入輸出流,可用來遍歷所關聯的io流。3 反向迭代器 rev...