讀書筆記 迭代器概念與traits程式設計技法

2022-03-23 09:47:03 字數 1343 閱讀 8416

迭代器:提供一種方法,使之能夠依序巡訪某個容器內所有的元素,而又無需暴露該容器的內部表達方式。

traits程式設計技法

迭代器所指物件的型別,稱之為該迭代器的value type。

1 template 

2struct

myiter

37 t& operator*() const 8//

....9};

1011

12 template

13 typename i::value_type //

func的返回型別

14func(i ite)

1518

19 myiter ite(new

int(8

));20 cout << func(ite) << endl; //

8

view code

上述**中func()的返回值必須加上關鍵字typename,因為t是乙個template引數,在它被編譯器具體化之前,編譯器對t一無所知。關鍵字typename的用意在於告訴編譯器這是乙個型別,如此才能順利編譯通過。

但是上面的方法有乙個缺陷,並不是所有的迭代器都是class type。原生指標就不是,無法為原生指標定義內嵌型別。但是stl中必須接受原生指標作為一種迭代器。所以可以用template partial specialization(偏特化)完成。

偏特化:如果乙個class template擁有乙個以上的template引數,我們可以針對其中某個(或數個,但不是全部)template引數進行特化工作。

myiter改成下面的iterator_traits

1 template 

2struct

iterator_traits ;

這個所謂的traits意義是,如果i定義有自己的value type,那麼通過這個traits的作用,萃取出來的value_type就是i::value_type。func可以改成下面的寫法

1 template 

2 typename iterator_traits::value_type

3func(i ite)

4

同時令iterator_traites擁有乙個偏特化版本,如下:

1 tempalte 

2struct iterator_tratis;

於是原生指標int*雖然不是一種class type,也可以通過tratis萃取其value type。

這就解決了class type的迭代器和原生指標value_type的問題。

STL讀書筆記 迭代器概念

一。概念 1 迭代器在設計模式中成為iterator模式,其定義為 提供一種方法,使他能夠按順序遍歷某個聚合體 容器 所包含的所有元素,但又不需要暴露該容器的內部表現方式。2 迭代器是一種類似指標的物件,他的工作也主要是內容提取 dereference 和成員的訪問 member access 因此...

STL讀書筆記 迭代器概念

一。概念 1 迭代器在設計模式中成為iterator模式,其定義為 提供一種方法,使他能夠按順序遍歷某個聚合體 容器 所包含的所有元素,但又不需要暴露該容器的內部表現方式。2 迭代器是一種類似指標的物件,他的工作也主要是內容提取 dereference 和成員的訪問 member access 因此...

讀書筆記 《STL STL迭代器?》

3 迭代器的定義方式 4 其他 迭代器目的 配合容器訪問 運算元據等操作 就像對資料單元的排序 查詢 求和等需要對資料進行遍歷的操作之類的,也特別像鍊錶裡面的指標遍歷的方式是一樣的 迭代器特性 1 適用性 適合所有通用的容器 極個別容器除外,因為容器的特性使然 技術是使用的泛型技術 2 封裝性 對外...