- Description
- A Reversible Container is a ForwardContainer whose iterators are BidirectionalIterator. It allows backwards iteration through the container.
- Refinement Of
- ForwardContainer
- Associated Type(s)
- Two new types are introduced. In addition, the iterator type and the const iterator type must satisfy a more stringent requirement than for a ForwardContainer. The iterator and reverse iterator types must be BidirectionalIterator, not merely ForwardIterator.
Reverse iterator type | X::reverse_iterator | A ReverseIterator adaptor whose base iterator type is the container's iterator type. Incrementing an object of type reverse_iterator moves backwards through the container: the ReverseIterator adaptor maps operator++ to operator-- . |
Const reverse iterator type | X::const_reverse_iterator | A ReverseIterator adaptor whose base iterator type is the container's const iterator type. [1] |
- Notation
X | A type that is a model of Reversible Container |
a , b | Object of type X |
- Definitions
- Valid Expressions
- In addition to the expressions defined in ForwardContainer, the following expressions must be valid.
Name | Expression | Type requirements | Return type |
Beginning of range | a.rbegin() | | reverse_iterator if a is mutable, const_reverse_iterator otherwise [1] |
End of range | a.rend() | | reverse_iterator if a is mutable, const_reverse_iterator otherwise [1] |
- Expression Semantics
- Semantics of an expression is defined only where it is not defined in ForwardContainer, or where there is additional information.
Name | Expression | Precondition | Semantics | Postcondition |
Beginning of reverse range | a.rbegin() | | Equivalent to X::reverse_iterator(a.end()) . | a.rbegin() is dereferenceable or past-the-end. It is past-the-end if and only if a.size() == 0 . |
End of reverse range | a.rend() | | Equivalent to X::reverse_iterator(a.begin()) . | a.end() is past-the-end. |
- Complexity Guarantee(s)
- The run-time complexity of
rbegin()
and rend()
is amortized constant time.
- Invariants
Valid range | [a.rbegin(), a.rend()) is a valid range. |
Equivalence of ranges | The distance from a.begin() to a.end() is the same as the distance from a.rbegin() to a.rend() . |
- Type(s) Modeling this Concept
-
- Notes
[1] A Container's iterator type and const iterator type may be the same type: a container need not provide mutable iterators.
It follows from this that the reverse iterator type and the const reverse iterator type may also be the same.
- See Also
- The Iterators, BidirectionalIterator, Sequence