C++ named requirements: ReversibleContainer
A ReversibleContainer is a Container that has iterators that meet the requirements of either LegacyBidirectionalIterator or LegacyRandomAccessIterator. Such iterators allow a ReversibleContainer
Requirements
A type satisfies ReversibleContainer if it satisfies Container, its iterator type belongs to the bidirectional or random access iterator categories
| Type | Definition |
X
|
an ReversibleContainer type |
T
|
the value_type of X
|
| Value | Definition |
| a | a value of type X
|
Types
| Name | Type | Requirements |
|---|---|---|
| typename X::reverse_iterator | std::reverse_iterator <X:: iterator > | an iterator type whose value type is T
|
| typename X::const_reverse_iterator | std::reverse_iterator <X:: const_iterator > | a constant iterator type whose value type is T
|
Expressions
The types reverse_iterator and const_reverse_iterator in the following table denote typename X::reverse_iterator and typename X::const_reverse_iterator
| Expression | Type | Semantics | Complexity |
|---|---|---|---|
| a.rbegin() | reverse_iteratorconst_reverse_iterator for constant a
|
reverse_iterator(a.end()) | Constant |
| a.rend() | reverse_iteratorconst_reverse_iterator for constant a
|
reverse_iterator(a.begin()) | Constant |
| a.crbegin() | const_reverse_iterator
|
const_cast < const X& > (a).rbegin ( ) | Constant |
| a.crend() | const_reverse_iterator
|
const_cast < const X& > (a).rend ( ) | Constant |
Library types
The following standard library types satisfy ReversibleContainer requirements:
|
(C++11)
|
fixed-sized inplace contiguous array (class template) |
| double-ended queue (class template) |
|
| doubly-linked list (class template) |
|
| dynamic contiguous array (class template) |
|
|
(C++26)
|
dynamically-resizable, fixed capacity, inplace contiguous array (class template) |
| collection of key-value pairs, sorted by keys, keys are unique (class template) |
|
| collection of key-value pairs, sorted by keys (class template) |
|
| collection of unique keys, sorted by keys (class template) |
|
| collection of keys, sorted by keys (class template) |
Example
The following example iterates over a vector (which has legacy random-access iterators
#include <iostream> #include <vector> int main() { std::vector<int> v = {3, 1, 4, 1, 5, 9}; for (std::vector<int>::const_reverse_iterator i{v.crbegin()}; i != v.crend(); ++i) std::cout << *i << ' '; std::cout << '\n'; }
Output:
9 5 1 4 1 3
Defect reports
The following behavior-changing defect reports were applied retroactively to previously published C++ standards.
| DR | Applied to | Behavior as published | Correct behavior |
|---|---|---|---|
| LWG 2105 | C++98 |
typename X::const_reverse_iterator was required to be an iterator type of value type const T |
required to be a constant iterator type of value type T
|