C++ concepts: RandomAccessIterator

A RandomAccessIterator is a BidirectionalIterator that can be moved to point to any element in constant time.

A pointer to an element of an array satisfies all requirements of RandomAccessIterator.


The type It satisfies RandomAccessIterator if.

And, given.

  • value_type, the type denoted by std::iterator_traits<It>::value_type
  • difference_type, the type denoted by std::iterator_traits<It>::difference_type
  • reference, the type denoted by std::iterator_traits<It>::reference
  • i, a, b, objects of type It or const It
  • r, a value of type It&
  • n, an integer of type difference_type

The following expressions must be valid and have their specified effects.

Expression Return type Operational semantics Notes
r += n It& difference_type m = n; if (m >= 0) while (m--) ++r; else while (m++) --r; return r;
  • n can be both positive or negative
  • The complexity is constant (that is, the implementation cannot actually execute the while loop shown in operational semantics)
a + n

n + a.

It It temp = a; return temp += n;
  • n can be both positive or negative
  • a + n == n + a
r -= n It& return r += -n; The absolute value of n must be within the range of representable values of difference_type.
i - n It It temp = i; return temp -= n;
b - a difference_type return n;


  • there exists a value n of type difference_type such that a+n==b


  • b == a + (b - a).
i[n] convertible to reference *(i + n)
a < b contextually convertible to bool b - a > 0 Strict total ordering relation:
  • !(a < a)
  • if a < b then !(b < a)
  • if a < b and b < c then a < c
  • a < b or b < a or a == b
    (exactly one of the expressions is true)
a > b contextually convertible to bool b < a Total ordering relation opposite to a < b
a >= b contextually convertible to bool !(a < b)
a <= b contextually convertible to bool !(a > b)

The above rules imply that RandomAccessIterator also implements LessThanComparable.

A mutable RandomAccessIterator is a RandomAccessIterator that additionally satisfies the OutputIterator requirements.

See also

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.