# C++ 具名要求：可逆容器 (ReversibleContainer)

< cpp‎ | named req

可逆容器 (ReversibleContainer) 是拥有满足老式双向迭代器 (LegacyBidirectionalIterator) 或老式随机访问迭代器 (LegacyRandomAccessIterator) 要求的迭代器的容器 (Container) 。这些迭代器允许对可逆容器 (ReversibleContainer) 进行逆序迭代。

### 要求

`X` | 容器类型
`T` | 元素类型
`a` | `X` 类型对象

#### 类型

表达式 | 返回类型 | 条件 | 复杂度
--- | --- | --- | ---
X::reverse_iterator | 值类型为 `T` 的迭代器类型 | reverse_iterator<iterator> | 编译时
X::const_reverse_iterator | 值类型为 `T` 的常迭代器类型 | reverse_iterator<const_iterator> | 编译时

#### 方法

表达式 | 返回类型 | 条件 | 复杂度
--- | --- | --- | ---
a.rbegin() | reverse_iterator； 对常数 `a` 为 const_reverse_iterator | reverse_iterator(end()) | 常数
a.rend() | reverse_iterator ； 对常数 `a` 为 const_reverse_iterator | reverse_iterator(begin()) | 常数
a.crbegin() | const_reverse_iterator | const_cast<X const&>(a).rbegin() | 常数
a.crend() | const_reverse_iterator | const_cast<X const&>(a).rend() | 常数

### 示例

下列示例在（拥有随机访问迭代器的）vector 上逆序迭代。

    #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';
        }
    }

输出：

    9
    5
    1
    4
    1
    3

### 标准库

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