C++ 命名要求: LegacyIterator
来自 cppreference.cn
LegacyIterator 要求描述了可用于标识和遍历容器元素的类型。
LegacyIterator 是其他迭代器类型所使用的基础要求集:LegacyInputIterator、LegacyOutputIterator、LegacyForwardIterator、LegacyBidirectionalIterator 和 LegacyRandomAccessIterator。迭代器可以被视为指针的抽象。
所有迭代器类别都只要求在给定类别下以常数时间(均摊)可实现的功能。因此,迭代器的要求表和概念定义(C++20 起)不指定复杂度。
目录 |
[编辑] 要求
如果类型 It
满足 LegacyIterator,则
- 类型
It
满足 CopyConstructible,并且 - 类型
It
满足 CopyAssignable,并且 - 类型
It
满足 Destructible,并且 - 类型
It
满足 Swappable,并且 - std::iterator_traits<It> 具有成员 typedef
value_type
(C++20 之前)、difference_type
、reference
、pointer
和iterator_category
,并且 - 给定
r
,一个类型为It
的左值,以下表达式必须是有效的并具有其指定的效果
表达式 | 返回类型 | 前置条件 |
---|---|---|
*r | 未指定 | r 是可解引用的 |
++r | It& | r 是可递增的(表达式 ++r 的行为已定义) |
概念对于 std::iterator_traits 的定义,定义了以下仅用于说明的概念。
其中,仅当 T& 是有效类型(特别是 |
(C++20 起) |
[编辑] 缺陷报告
下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。
缺陷报告 | 应用于 | 发布时的行为 | 正确的行为 |
---|---|---|---|
LWG 2437 | C++98 | 要求 *r 为 reference |
对输出迭代器不要求 |
LWG 3420 | C++20 | 内部概念首先检查 copyable |
只有当 requires 表达式为真时才检查 copyable |
[编辑] 参阅
(C++20) |
指定类型对象可以被增量和解引用 (概念) |
迭代器库 | 为迭代器、迭代器特性、适配器和实用函数提供定义 |