.. Iterators/Concepts//Random Access Iterator |30 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::type`` | |Random Access Iterator| | Amortized constant time | +---------------------------+-------------------------------------------+---------------------------+ | ``prior::type`` | |Random Access Iterator| | Amortized constant time | +---------------------------+-------------------------------------------+---------------------------+ | ``i::category`` | |Integral Constant|, convertible | Constant time | | | to ``random_access_iterator_tag`` | | +---------------------------+-------------------------------------------+---------------------------+ | ``advance::type`` | |Random Access Iterator| | Amortized constant time | +---------------------------+-------------------------------------------+---------------------------+ | ``distance::type`` | |Integral Constant| | Amortized constant time | +---------------------------+-------------------------------------------+---------------------------+ Expression semantics -------------------- .. parsed-literal:: typedef advance::type j; :Semantics: See ``advance`` specification .. .......................................................................... .. parsed-literal:: typedef distance::type n; :Semantics: See ``distance`` specification Invariants ---------- For any random access iterators ``i`` and ``j`` the following invariants always hold: * If ``advance::type`` is well-defined, then ``advance< advance::type, negate::type >::type`` is a null operation. See also -------- |Iterators|, |Bidirectional Iterator|, |Random Access Sequence|, |advance|, |distance|