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

来自cppreference.com
< cpp‎ | named req


 
 
C++ 具名要求
 

可逆容器 (ReversibleContainer) 是拥有满足老式双向迭代器 (LegacyBidirectionalIterator) 老式随机访问迭代器 (LegacyRandomAccessIterator) 的迭代器的容器 (Container) 。这些迭代器允许对可逆容器 (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
对于常量 aconst_reverse_iterator 
reverse_iterator(a.end()) 常数
a.rend() reverse_iterator
对于常量 aconst_reverse_iterator
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++ 标准。

缺陷报告 应用于 出版时的行为 正确行为
LWG 2105 C++98 要求 typename X::const_reverse_iterator
是值类型是 const T 的迭代器类型
要求它是值类型是
T 的常迭代器类型