STL-迭代器与traits技法
2017-07-08 20:42
260 查看
迭代器
在设计模式中,迭代器模式定义为:提供一种方法,使之能够依序巡防某个聚合物(容器)所含的各个元素,而又无需暴露该聚合物的内部表达式在STL中,迭代器把数据容器和算法撮合在一起,扮演了粘合剂的作用。
它的基本用法是:
vector<int> v; (vector/deque/list...) vector<int>::iterator it=v.begin()
从上面的例子看出迭代器是一个行为类似指针的对象,迭代器最重要的编程工作就是对operator*和operator->进行重载工作。
Traits编程技法
当函数,类或者一些封装的通用算法中的某些部分会因为数据类型不同而导致处理或逻辑不同(而我们又不希望因为数据类型的差异而修改算法本身的封装时),traits会是一种很好的解决方案。traits可以理解为特性。迭代器所指对象的型别,称为该迭代器的value type。在《STL源码剖析》中有这张图:
图中说明了traits,萃取了各个迭代器的特性(迭代器型别),最常用到的型别有五种:
value type
different type
pointer
reference
iterator category
value type
指迭代器所指对象的型别different type
表示两个迭代器之间的距离reference type
表示迭代器所指对象是否允许改变pointer type
传回的对象?iterator_category
根据移动特性与施行操作,迭代器被分为五类:Input Iterator:只读
Output Intertor:只写
Forward Iterator:允许”写入型”算法在此种迭代器形成的区间上进行读写操作
Bidirectional Iterator:可双向移动。
Random Access Iterator:涵盖所有指针算术能力(+,-,[],<…)
从属关系:
Ex:distance()为例,用于计算两个迭代器的距离。针对不同的迭代器,可以有不用的计算方式,带来不同的效率。
template<class InputIterator> inline iterator_traits<InputIterator>::different_type _distance(InputIterator first,InputIterator last,input_iterator_tag){ iterator_traits<InputIterator>::different_type n=0; //逐一累计距离 while(first != last){ ++first;++n; } return n; } template<class RandomAccessIterator> inline iterator_traits<RandomAccessIterator>::different_type _distance(RandomAccessIterator first,RandomAccessIterator last,random_access_iterator_tag){ //直接计算差距 return last-first; } template <class InputIterator> inline iterator_traits<InputIterator>::difference_type distance(InputIterator first,InputIterator last){ typedef typename iterator_traits<InputIterator>::iterator_category category; return _distance(first,last,category()); }
distance()可接受任何类型的迭代器,Forward Iterators或Bidirectional Iterators时,统统都会传递调用Input Iterator版的那个 _distance()函数。
参考资料
《STL源码剖析》神奇的Traits
相关文章推荐
- STL(6)之Traits编程技法 与迭代器
- STL之迭代器与traits编程技法
- STL——迭代器与traits编程技法
- STL中迭代器概念与traits编程技法
- STL 迭代器概念及traits编程技法
- STL源码学习——迭代器(iterators)与traits编程技法
- STL源码分析读书笔记--第三章--迭代器(iterator)概念与traits编程技法
- STL-迭代器和traits编程技法
- 迭代器(iterator) 与 traits 编程技法
- 【STL源码剖析读书笔记】【第3章】迭代器概念与traits编程技法
- STL源码剖析笔记四--迭代器与traits技法
- STL源码剖析_读书笔记:第三章 迭代器概念与traits编程技法
- STL之traits技法
- STL之traits编程技法
- 迭代器概念及traits编程技法.md
- Ch3 迭代器概念与traits编程技法
- STL源码学习(一)迭代器概念与traits编程技法
- 温习一下stl的traits技法
- 《STL源码剖析》读书笔记------第3 章 迭代器概念与traits编程技法
- 《STL源码剖析》阅读笔记之 迭代器及traits编程技法