C++ 具名要求:可逆容器 (ReversibleContainer)
来自cppreference.com
可逆容器 (ReversibleContainer) 是拥有满足老式双向迭代器 (LegacyBidirectionalIterator) 或老式随机访问迭代器 (LegacyRandomAccessIterator) 的迭代器的容器 (Container) 。这些迭代器允许对可逆容器 (ReversibleContainer) 进行逆序迭代。
要求
一个类型满足可逆容器 (ReversibleContainer) 的条件是,它满足容器 (Container) ,它的迭代器类型属于双向或随机访问迭代器分类,并且给定以下类型和值,它也满足下方表格列出的语义和复杂度要求:
| 类型 | 定义 |
X
|
可逆容器 (ReversibleContainer) 类型 |
T
|
X 的 value_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_iterator 和 const_reverse_iterator 分别表示 typename X::reverse_iterator 和 typename X::const_reverse_iterator。
| 表达式 | 类型 | 语义 | 复杂度 |
|---|---|---|---|
a.rbegin()
|
reverse_iterator对于常量 a 是 const_reverse_iterator
|
reverse_iterator(a.end())
|
常数 |
a.rend()
|
reverse_iterator对于常量 a 是 const_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()
|
常数 |
库类型
下列标准库类型满足可逆容器 (ReversibleContainer) :
(C++11) |
固定大小的原位连续数组 (类模板) |
| 双端队列 (类模板) | |
| 双向链表 (类模板) | |
| 动态的连续数组 (类模板) | |
(C++26) |
可动态调整大小的固定容量原位连续数组 (类模板) |
| 键值对的集合,按照键排序,键是唯一的 (类模板) | |
| 键值对的集合,按照键排序 (类模板) | |
| 唯一键的集合,按照键排序 (类模板) | |
| 键的集合,按照键排序 (类模板) |
示例
下列示例在(拥有老式随机访问迭代器的)std::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 的常迭代器类型
|