C++ 命名要求: 旧式双向迭代器
来自 cppreference.cn
旧式双向迭代器 是 旧式前向迭代器,它可以在两个方向上移动(即,递增和递减)。
如果 旧式双向迭代器 it 源自 容器,则 it 的 value_type
与容器的相同,因此解引用 (*it) 会获得容器的 value_type
。
目录 |
[编辑] 要求
如果类型 It
满足 旧式双向迭代器 的要求,则:
- 类型
It
满足 旧式前向迭代器
并且,给定
- a 和 b,类型
It
的左值 -
reference
,由 std::iterator_traits<It>::reference 表示的类型
以下表达式必须有效,并具有其指定的效果
表达式 | 返回 | 等效表达式 | 注释 |
---|---|---|---|
--a | It& |
前提条件
后置条件
| |
a-- | 可转换为 const It& | It temp = a; --a; |
|
*a-- | reference |
可变旧式双向迭代器是 旧式双向迭代器,它还满足 旧式输出迭代器 的要求。
[编辑] 注释
begin 迭代器不可递减,如果计算 --container.begin(),则行为未定义。
双向迭代器不必是可解引用的才能是可递减的(特别是,end 迭代器不可解引用但可递减)。
概念对于 std::iterator_traits 的定义,定义了以下仅用于说明的概念。
其中,仅用于说明的概念 |
(自 C++20 起) |
[编辑] 缺陷报告
以下行为变更缺陷报告已追溯应用于先前发布的 C++ 标准。
DR | 应用于 | 已发布行为 | 正确行为 |
---|---|---|---|
LWG 299 (N3066) |
C++98 | *a-- 的返回类型 需要可转换为 T |
将返回类型更改为 reference [1]类型更改为 reference [1] |
LWG 383 | C++98 | b 需要在 --a 之后可解引用 | 改为 a 需要可解引用 |
LWG 1212 (N3066) |
C++98 | *a-- 的返回类型与 “旧式前向迭代器” 要求的 *a++ 的返回类型不匹配 |
将返回类型更改为 reference [1]类型更改为 reference |
[编辑] 参见
(C++20) |
指定 forward_iterator 是一个双向迭代器,支持向后移动 (concept) |
迭代器库 | 提供迭代器、迭代器特征、适配器和实用函数的定义 |