一个类或内置类型X如果以下表达式有效且符合所述语义,则建模为 随机访问遍历 (Random Access Traversal) 概念。在下表中,距离是iterator_traits<X>::difference_typeandn表示一个类型为距离.
| 随机访问遍历迭代器要求(在双向遍历的基础上) | |||
|---|---|---|---|
| 表达式 | 返回类型 | 操作语义 | 断言/前提条件 |
| r += n | X& | {
Distance m = n;
if (m >= 0)
while (m--)
++r;
else
while (m++)
--r;
return r;
}
|
|
| a + n, n + a | X | { X tmp = a; return tmp += n; } | |
| r -= n | X& | return r += -n | |
| a - n | X | { X tmp = a; return tmp -= n; } | |
| b - a | 距离 | a < b ? distance(a,b) : -distance(b,a) | pre: 存在一个值n的距离使得a + n == b. b == a + (b - a). |
| a[n] | 可转换为 T | *(a + n) | 前置条件:a 是一个 可读迭代器 (Readable Iterator) |
| a[n] = v | 可转换为 T | *(a + n) = v | 前置条件:a 是一个 可写迭代器 (Writable iterator) |
| a < b | 可转换为bool | b - a > 0 | <是全序关系 |
| a > b | 可转换为bool | b < a | >是全序关系 |
| a >= b | 可转换为bool | !(a < b) | |
| a <= b | 可转换为bool | !(a > b) | |
| iterator_traversal<X>::type | 可转换为random_access_traversal_tag | ||