C++ 命名需求: 可逆容器
来自 cppreference.com
一个 可逆容器 是一个 容器,其迭代器满足 遗留双向迭代器 或 遗留随机访问迭代器 的要求。这样的迭代器允许 可逆容器 反向迭代。
内容 |
[编辑] 需求
如果一个类型满足 可逆容器,则它满足 容器,其迭代器类型属于双向或随机访问 迭代器类别,并且,鉴于以下类型和值,满足以下表格中的语义和复杂性要求
类型 | 定义 |
X
|
一个 可逆容器 类型 |
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 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() | 常量 |
[编辑] 标准库
- std::array
- std::deque
- std::list
- std::vector
- std::inplace_vector
- std::map
- std::multimap
- std::set
- std::multiset
[编辑] 示例
以下示例反向迭代一个 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 的常量迭代器类型 |