头文件
<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是一个整数值。
更多详细信息,请参阅输入迭代器、输出迭代器、前向迭代器、双向迭代器和随机访问迭代器的参考。