The MPL Reference Manual: Random Access Iterator

Front Page / Iterators / Concepts / Random Access Iterator

# Random Access Iterator

### Description

A Random Access Iterator is a Bidirectional Iterator that provides constant-time guarantees on moving the iterator an arbitrary number of positions forward or backward and for measuring the distance to another iterator in the same sequence.

### Refinement of

Bidirectional Iterator

### Expression requirements

In addition to the requirements defined in Bidirectional Iterator, the following requirements must be met.

Expression | Type | Complexity
--- | --- | ---
`next<i>::type` | Random Access Iterator | Amortized constant time
`prior<i>::type` | Random Access Iterator | Amortized constant time
`i::category` | Integral Constant, convertible to `random_access_iterator_tag` | Constant time
`advance<i,n>::type` | Random Access Iterator | Amortized constant time
`distance<i,j>::type` | Integral Constant | Amortized constant time

### Expression semantics

    typedef advance<i,n>::type j;

Semantics: | See `advance` specification

    typedef distance<i,j>::type n;

Semantics: | See `distance` specification

### Invariants

For any random access iterators `i` and `j` the following invariants always hold:

- If `advance<i,n>::type` is well-defined, then `advance< advance<i,n>::type, negate<n>::type >::type` is a null operation.

### See also

Iterators, Bidirectional Iterator, Random Access Sequence, advance, distance