STL之迭代器與traits程式設計技法

2021-08-04 07:53:23 字數 2228 閱讀 8911

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...