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++ 标准。
DR | 应用于 | 发布的行为 | 正确行为 |
---|---|---|---|
LWG 299 (N3066) |
C++98 | *a-- 的返回值类型 要求可以转换为 T |
更改返回值 类型为 reference [1] |
LWG 383 | C++98 | b 要求在 --a 之后可解引用 | a 要求可解引用,而不是 |
LWG 1212 (N3066) |
C++98 | *a-- 的返回值类型与 *a++ 的返回值类型不匹配,这是 LegacyForwardIterator 所要求的 |
更改返回值 类型为 reference |
[编辑] 参见
(C++20) |
指定 forward_iterator 是一个双向迭代器,支持向后移动(概念) |
迭代器库 | 提供迭代器、迭代器特性、适配器和实用函数的定义 |