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 |
可变(mutable)老式双向迭代器 (LegacyBidirectionalIterator) 是还额外满足老式输出迭代器 (LegacyOutputIterator) 要求的老式双向迭代器 (LegacyBidirectionalIterator) 。
注解
起始迭代器不可自减。且求值 --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 为双向迭代器,支持向后移动 (概念) |
迭代器库 | 提供迭代器的定义、迭代器表征、适配器及工具函数 |