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是双向迭代器,支持向后移动(概念) |
| 迭代器库 | 为迭代器、迭代器特性、适配器和实用函数提供定义 |