笔记:STL学习(三)-- 迭代器的五大型别

笔记:STL学习(三)-- 迭代器的五大型别

任何迭代器都应提供五个内嵌相应类别,以利于traits萃取。

value type

所谓value type,指的是迭代器所指对象的类型。任何一个与STL有完美搭配的class,都应该定义value type内嵌类型

difference type

difference type表示两个迭代器之间的距离,因此也可用来表示一个容器的最大容量(头尾距离),以alogrithm中的count()为例:

对于原生指针,c++内建了ptrdiff_t(位于头文件内)作为原生指针的difference type(在iterator_traits<(const) T*>中使用)

当需要迭代器I的difference type,可以写typename iterator_traits::difference_type,如上图中所示。

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所需之规范

posted @ 2022-03-28 23:10  maybe_fl  阅读(205)  评论(0编辑  收藏  举报