[random.access.iterators] (original) (raw)

A class or pointer typeXmeets the requirements of a random access iterator if, in addition to meeting the Cpp17BidirectionalIterator requirements, the following expressions are valid as shown in Table 81.

Table 81Cpp17RandomAccessIterator requirements (in addition to Cpp17BidirectionalIterator) [tab:randomaccessiterator]

🔗Expression Return type Operational Assertion/note
🔗 semantics pre-/post-condition
🔗r += n X& { difference_type m = n; if (m >= 0) while (m--) ++r; else while (m++) --r; return r; }
🔗a + nn + a X { X tmp = a; return tmp += n; } a + n == n + a.
🔗r -= n X& return r += -n; Preconditions: 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; Preconditions: 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 decltype(a < b) models boolean-testable Effects: Equivalent to: return b - a > 0; < is a total ordering relation
🔗a > b decltype(a > b) models boolean-testable b < a > is a total ordering relation opposite to <.
🔗a >= b decltype(a >= b) models boolean-testable !(a < b)
🔗a <= b decltype(a <= b) models boolean-testable !(a > b)