第三章 迭代器与trait编程技巧
2014-11-25 18:43
363 查看
Trait所扮演的角色是特性萃取机的角色,萃取各个迭代器的特性,为了使trait特性有效运作,每一个迭代器必须遵循约定,自行以内嵌型别定义的方式定义出相应型别。根据编译器利用function template的参数推导机制,确定型别。(利用该机制解决参数返回值的型别定义)
template<class Category,class T , class Distance=ptrdiff_t,class Pointer=T*,class Reference=T&>
struct iterator{ //使用可以看后面的Vector
typedef Category iterator_ategory;
typedef T value_type;
typedef Distance difference_type;
typedef Pointer pointer;
typedef Reference reference;
};
template<class Iterator>
struct iterator_traits{ //萃取特性 定义结构方便使用
typedef typename Iterator:: iterator_ategory iterator_ategory;
typedef typename Iterator::value_type value_type;
typedef typename Iterator:: difference_type difference_type;
typedef typename Iterator:: pointer pointer;
typedef typename Iterator::reference reference;
};
typename 用意在于告诉编译器这是一个型别,因为在此之前编译器并不知道iterator<T>::value_type代表的是一个型别或者是member function或者是一个data member.
使用方法:
Iterator_traits<int>::value_type ......
由于并非是所有迭代器都是class type,原生指针就不是,就有偏特化版本引出
template<T>
struct iterator_traits<T*>{
typedef radom_access_iterator_tag iterator_ategory;
typedef T value_type;
typedef ptrdiff_t difference_type;
typedef const T* pointer;
typedef const T& reference;
};
template<T>
struct iterator_traits<T*>{
typedef radom_access_iterator_tag iterator_ategory;
typedef T value_type;
typedef ptrdiff_t difference_type;
typedef T* pointer;
typedef T& reference;
};
迭代器的五种分类:
Input Iterator,Output Iterator,Forward Iterator ,Bidirection Iterator,Random Access Iterator;
template<class Category,class T , class Distance=ptrdiff_t,class Pointer=T*,class Reference=T&>
struct iterator{ //使用可以看后面的Vector
typedef Category iterator_ategory;
typedef T value_type;
typedef Distance difference_type;
typedef Pointer pointer;
typedef Reference reference;
};
template<class Iterator>
struct iterator_traits{ //萃取特性 定义结构方便使用
typedef typename Iterator:: iterator_ategory iterator_ategory;
typedef typename Iterator::value_type value_type;
typedef typename Iterator:: difference_type difference_type;
typedef typename Iterator:: pointer pointer;
typedef typename Iterator::reference reference;
};
typename 用意在于告诉编译器这是一个型别,因为在此之前编译器并不知道iterator<T>::value_type代表的是一个型别或者是member function或者是一个data member.
使用方法:
Iterator_traits<int>::value_type ......
由于并非是所有迭代器都是class type,原生指针就不是,就有偏特化版本引出
template<T>
struct iterator_traits<T*>{
typedef radom_access_iterator_tag iterator_ategory;
typedef T value_type;
typedef ptrdiff_t difference_type;
typedef const T* pointer;
typedef const T& reference;
};
template<T>
struct iterator_traits<T*>{
typedef radom_access_iterator_tag iterator_ategory;
typedef T value_type;
typedef ptrdiff_t difference_type;
typedef T* pointer;
typedef T& reference;
};
迭代器的五种分类:
Input Iterator,Output Iterator,Forward Iterator ,Bidirection Iterator,Random Access Iterator;
相关文章推荐
- STL源码剖析——迭代器概念和trait编程技巧
- 《stl源码剖析》-- 迭代器概念和trait编程技法
- STL源码分析读书笔记--第三章--迭代器(iterator)概念与traits编程技法
- STL学习之迭代器和trait编程技巧
- STL中迭代器与traits编程的技巧
- STL学习之迭代器和trait编程技巧
- STL源码剖析_读书笔记:第三章 迭代器概念与traits编程技法
- 第二部分 Linux Shell高级编程技巧——第三章 运行级别脚本介绍
- 第二部分 Linux Shell高级编程技巧——第三章 运行级别脚本介绍
- 迭代器(iterators)与traits编程技巧
- “条件递进式编程”技巧两例
- Java编程技巧:列表排序
- 编程技巧汇萃(下)
- Java数据库编程中的几个常用技巧
- Java 程序编码规范 编程技巧 Swing 调试
- .Net编程技巧集锦
- ASP初学者的10个编程技巧
- .Net编程技巧集锦
- 编程技巧汇萃(上)
- [导入]VB编程的必备技巧