命名空间
变体
操作

C++ 命名要求: ReversibleContainer

来自 cppreference.cn
 
 
C++ 命名要求
 

ReversibleContainer 是一个 Container,其迭代器满足 LegacyBidirectionalIteratorLegacyRandomAccessIterator 的要求。 这样的迭代器允许 ReversibleContainer 以反向迭代。

目录

[编辑] 要求

如果一个类型满足 ReversibleContainer,则它必须满足 Container,其迭代器类型属于双向或随机访问 迭代器类别,并且给定以下类型和值,则满足下表中的语义和复杂度要求

类型 定义
X 一个 ReversibleContainer 类型
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() 常量

[编辑] 库类型

以下标准库类型满足 ReversibleContainer 要求

(C++11)
固定大小的原位连续数组
(类模板) [编辑]
双端队列
(类模板) [编辑]
双向链表
(类模板) [编辑]
可调整大小的连续数组
(类模板) [编辑]
可调整大小、固定容量的原位连续数组
(类模板) [编辑]
键值对集合,按键排序,键是唯一的
(类模板) [编辑]
键值对集合,按键排序
(类模板) [编辑]
唯一键的集合,按键排序
(类模板) [编辑]
键的集合,按键排序
(类模板) [编辑]

[编辑] 示例

以下示例反向迭代 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 的迭代器类型