笔记:STL学习(三)-- 迭代器的五大型别
笔记:STL学习(三)-- 迭代器的五大型别
任何迭代器都应提供五个内嵌相应类别,以利于traits萃取。
value type
所谓value type,指的是迭代器所指对象的类型。任何一个与STL有完美搭配的class,都应该定义value type内嵌类型
difference type
difference type表示两个迭代器之间的距离,因此也可用来表示一个容器的最大容量(头尾距离),以alogrithm中的count()
为例:
对于原生指针,c++内建了ptrdiff_t(位于
当需要迭代器I的difference type,可以写typename iterator_traits
reference type
首先根据迭代器能否更改所指的对象,可以分为constant iterators和mutable iterators两种对应两种迭代器:
如果iterator是const的,那么若是其value_type是T,那么返回值应当是const T&;
如果iterator是mutable的,那么若是其value_type是T,那么返回值应当为T&。
pointer type
指向迭代器所指之物/对象的类型的指针的类型。
iterator category
-
Input Iterator: 此迭代器不允许修改所指的对象,是只读的。支持 ==、!=、++、、-> 等操作。
-
Output Iterator:允许算法在这种迭代器所形成的区间上进行只写操作。支持 ++、 等操作。
-
Forward Iterator:允许算法在这种迭代器所形成的区间上进行读写操作,但只能单向移动,每次只能移动一步。支持 Input Iterator 和 Output Iterator 的所有操作。
-
Bidirectional Iterator:允许算法在这种迭代器所形成的区间上进行读写操作,可双向移动,每次只能移动一步。支持 Forward Iterator 的所有操作,并另外支持 – 操作。
-
Random Access Iterator:包含指针的所有操作,可进行随机访问,随意移动指定的步数。支持前面四种 Iterator 的所有操作,并另外支持 [n] 操作符等操作。
迭代器的从属关系
为符合规范,任何迭代器都应提供五个内嵌相应类别,以利于traits萃取。STL为此提供了一个iterators class,也即std::iterator如下,如果每个新设计的迭代
器继承自它,就可保证STL所需之规范