24 Iterators library [iterators]

24.2 Iterator requirements [iterator.requirements]

24.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 [tab:iterator.random.access.requirements].

Table 111 — 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;
a - n X { X tmp = a;
return tmp -= n; }
b - a difference_type return n pre: 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)