命名空间
变体
操作

C++ 命名需求: 可逆容器

来自 cppreference.com
 
 
C++ 命名需求
 

一个 可逆容器 是一个 容器,其迭代器满足 遗留双向迭代器遗留随机访问迭代器 的要求。这样的迭代器允许 可逆容器 反向迭代。

内容

[编辑] 需求

如果一个类型满足 可逆容器,则它满足 容器,其迭代器类型属于双向或随机访问 迭代器类别,并且,鉴于以下类型和值,满足以下表格中的语义和复杂性要求

类型 定义
X 一个 可逆容器 类型
T Xvalue_type
定义
a X 类型的值

[编辑] 类型

名称 类型 需求
typename X::reverse_iterator std::reverse_iterator<X::iterator> 一个迭代器类型,其 值类型T
typename X::const_reverse_iterator  std::reverse_iterator<X::const_iterator>  一个常量迭代器类型,其 值类型T

[编辑] 表达式

以下表格中的类型 reverse_iteratorconst_reverse_iterator 分别表示 typename X::reverse_iteratortypename X::const_reverse_iterator

表达式 类型 语义  复杂度 
a.rbegin() reverse_iterator
const_reverse_iterator 用于常量 a
reverse_iterator(a.end()) 常量
a.rend() reverse_iterator
const_reverse_iterator 用于常量 a
reverse_iterator(a.begin()) 常量
a.crbegin() const_reverse_iterator const_cast<const X&>(a).rbegin() 常量
a.crend() const_reverse_iterator const_cast<const X&>(a).rend() 常量

[编辑] 标准库

[编辑] 示例

以下示例反向迭代一个 vector(具有 随机访问迭代器)。

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

输出

9 5 1 4 1 3

[编辑] 缺陷报告

以下行为更改缺陷报告被追溯地应用于先前发布的 C++ 标准。

DR 应用于 已发布的行为 正确的行为
LWG 2105 C++98 typename X::const_reverse_iterator
要求为值类型为 const T 的迭代器类型
要求为
值类型为 T 的常量迭代器类型