27 Iterators library [iterators]

27.2 Iterator requirements [iterator.requirements]

27.2.7 Random access iterators [random.access.iterators]

A class or pointer type X satisfies the requirements of a random access iterator if, in addition to satisfying the requirements for bidirectional iterators, the following expressions are valid as shown in Table 99.

Table 99 — Random access iterator requirements (in addition to bidirectional iterator)
ExpressionReturn typeOperationalAssertion/note
semanticspre-/post-condition
r += n X& { difference_­type 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; }
a + n == n + a.
r -= n X& return r += -n; Requires: the absolute value of n is in the range of representable values of difference_­type.
a - n X { X tmp = a;
return tmp -= n; }
b - a difference_­type return n Requires: there exists a value n of type difference_­type such that a + n == b.
b == a + (b - a).
a[n] convertible to reference *(a + n)
a < b contextually convertible to bool b - a > 0 < is a total ordering relation
a > b contextually convertible to bool b < a > is a total ordering relation opposite to <.
a >= b contextually convertible to bool !(a < b)
a <= b contextually convertible to bool. !(a > b)