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