C++ concepts: RandomAccessIterator - cppreference.com

##### cppreference.com

##### Search

Create account

##### Namespaces

- Page
- Discussion

##### Variants

##### Views

- View
- Edit
- History

##### Actions

# C++ concepts: RandomAccessIterator

From cppreference.com
< cpp‎ | concept

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

A standard pointer is an example of a type that satisfies this concept.

### [edit] Requirements

- `BidirectionalIterator`

In addition to the above requirement, for a type `It` to be an `RandomAccessIterator`, instances `a`, `b`, `i`, and `r` of `It` must:

Expression | Return | Equivalent expression | Notes
--- | --- | --- | ---
r += n | It& | if ( n >= 0 ) while(n--) ++r; else while(n++) --r; return r; | `n` can be both positive or negative Constant complexity (that is, the equivalent expression cannot be used as implementation)
i + n | It | It temp = i; return temp += n;
n + i | It | i + n
r -= n | It& | return r += -n; |
i - n | It | It temp = i; return temp -= n;
b - a | difference | n | returns `n` such that `a + n == b`, where `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)

#### [edit] Table Notes

- `It` is the type implementing this concept
- `T` is the type std::iterator_traits<It>::value_type
- `reference` is the type std::iterator_traits<It>::reference
- `difference` is the type std::iterator_traits<It>::difference_type
- `i`, `a`, `b` are objects of type `It` or `const It`
- `r` is a value of type `It&`
- `n` is an integer of type `difference`

The above rules imply that RandomAccessIterator also implements `LessThanComparable`.

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

### [edit] See also

- Iterator library

Retrieved from "http://en.cppreference.com/mwiki/index.php?title=cpp/concept/RandomAccessIterator&oldid=65434"