头文件

<iterator>

迭代器定义
迭代器是指向一个元素序列(如数组或容器)中的某个元素,并且能够使用一组运算符(至少包括递增(++)和解引用(*)运算符)遍历该序列元素的任何对象。

最明显的迭代器形式是指针:指针可以指向数组中的元素,并可以通过递增运算符(++)在它们之间迭代。但其他类型的迭代器也是可能的。例如,每种容器类型(如list)都有一个专门用于遍历其元素的迭代器类型。

请注意,虽然指针是迭代器的一种形式,但并非所有迭代器都具有与指针相同的多功能性;根据迭代器支持的属性,它们被分为五个不同的类别

迭代器类别

根据其实现的类容,迭代器分为五类


输入输出迭代器是最有限的迭代器类型:它们可以执行顺序的单次输入或输出操作。

前向迭代器具有输入迭代器的所有功能,并且(如果它们不是常量迭代器)还具有输出迭代器的功能,尽管它们仅限于在一个方向上遍历序列(前向)。所有标准容器都支持至少前向迭代器类型。

双向迭代器类似于前向迭代器,但也可以向后迭代。

随机访问迭代器实现了双向迭代器的所有功能,并且还能够非顺序地访问范围:可以通过将偏移量应用于迭代器来直接访问远距离的元素,而无需遍历中间的所有元素。这些迭代器具有与标准指针类似的功能(指针是此类别中的迭代器)。

每个迭代器类别的属性是

类别属性有效的表达式
所有类别可复制构造可复制赋值可析构X b(a);
b = a;
可以递增++a
a++
随机访问双向前向输入支持相等/不相等比较a == b
a != b
可作为右值解引用*a
a->m
输出可作为左值解引用
(仅适用于可变迭代器类型
*a = t
*a++ = t
默认可构造X a;
X()
多遍:解引用或递增都不会影响解引用能力{ b=a; *a++; *b; }
可以递减--a
a--
*a--
支持算术运算符+-a + n
n + a
a - n
a - b
支持迭代器之间的比较(<, >, <=>=a < b
a > b
a <= b
a >= b
支持复合赋值运算+=-=a += n
a -= n
支持偏移量解引用运算符([])a[n]

其中X是迭代器类型,a和 b是此迭代器类型的对象,t是由迭代器类型指向的类型的对象,而n是一个整数值。

更多详细信息,请参阅输入迭代器输出迭代器前向迭代器双向迭代器随机访问迭代器的参考。

函数

迭代器操作:

迭代器生成器:


预定义迭代器


类别标签