<iterator>

std::random_access_iterator_tag

struct random_access_iterator_tag {};
随机访问迭代器类别
用于标识迭代器类别的空类随机访问迭代器

随机访问迭代器


随机访问迭代器是指可以用于访问相对于其指向元素的任意偏移位置的元素,功能与指针相同。

随机访问迭代器在功能上是最完整的迭代器。所有指针类型也是有效的随机访问迭代器

不存在单一类型的随机访问迭代器:每个容器都可以定义自己的特定迭代器类型,以遍历它并访问其元素。但所有随机访问迭代器至少支持以下操作:

属性有效的表达式
可以默认构造拷贝构造拷贝赋值析构X a;
X b(a);
b = a;
可以使用相等/不等运算符进行等价比较
(当两个迭代器值指向相同的底层序列时才有意义)。
a == b
a != b
可以作为右值解引用(如果处于可解引用状态)。*a
a->m
对于可变迭代器非 const 迭代器
可以作为左值解引用(如果处于可解引用状态)。
*a = t
可以递增(如果处于可解引用状态)。
结果是也可解引用越界迭代器。
两个相等的迭代器,在都递增后仍然相等。
++a
a++
*a++
可以递减(如果存在可解引用的迭代器值在其前面)。
--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;
X b(a);
b = a;
可以使用相等/不等运算符进行等价比较
(当两个迭代器值指向相同的底层序列时才有意义)。
a == b
a != b
可以作为右值解引用(如果处于可解引用状态)。*a
a->m
对于可变迭代器非 const 迭代器
可以作为左值解引用(如果处于可解引用状态)。
*a = t
可以递增(如果处于可解引用状态)。
结果是也可解引用越界迭代器。
两个相等的迭代器,在都递增后仍然相等。
++a
a++
*a++
可以递减(如果存在可解引用的迭代器值在其前面)。
--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]
左值是可交换的swap(a,b)

其中 X随机访问迭代器类型ab 是该迭代器类型的对象,n 是其差值类型的值,而 t 是迭代器类型所指向的类型(或可以赋给由 X 类型对象解引用返回的左值的任何其他类型)的对象。

常量迭代器 是不满足输出迭代器要求的迭代器;解引用它们会得到对常量元素的引用(例如 const T&)。

另见