# C++ named requirements: ReversibleContainer

From cppreference.com
< cpp‎ | named req

A ReversibleContainer is a Container that has iterators that meet the requirements of either LegacyBidirectionalIterator or LegacyRandomAccessIterator. Such iterators allow a ReversibleContainer to be iterated over in reverse.

### Requirements

`X` | Container type
`T` | Element type
`a` | Objects of type `X`

#### Types

expression | return type | conditions | complexity
--- | --- | --- | ---
X::reverse_iterator | iterator type whose value type is `T` | reverse_iterator<iterator> | compile time
X::const_reverse_iterator | constant iterator type whose value type is `T` | reverse_iterator<const_iterator> | compile time

#### Methods

expression | return type | conditions | complexity
--- | --- | --- | ---
a.rbegin() | reverse_iterator; const_reverse_iterator for constant `a` | reverse_iterator(end()) | constant
a.rend() | reverse_iterator; const_reverse_iterator for constant `a` | reverse_iterator(begin()) | constant
a.crbegin() | const_reverse_iterator | const_cast<X const&>(a).rbegin() | constant
a.crend() | const_reverse_iterator | const_cast<X const&>(a).rend() | constant

### Example

The following example iterates over a vector (which has random-access iterators) in reverse.

Run this code

    #include <vector>
    #include <iostream>

    int main()
    {
        std::vector<int> v = {3, 1, 4, 1, 5, 9};

        for(std::vector<int>::reverse_iterator i = v.rbegin(); i != v.rend(); ++i) {
            std::cout << *i << '\n';
        }
    }

Output:

    9
    5
    1
    4
    1
    3

### Standard library

- std::array
- std::deque
- std::list
- std::vector
- std::map
- std::multimap
- std::set
- std::multiset

Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/named_req/ReversibleContainer&oldid=105391"