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 的定义,定义了以下仅供参考的概念。
其中,仅供参考的概念 __Referenceable<T> 当且仅当 T& 是有效类型时才满足(特别是, |
(C++20 起) |
[编辑] 缺陷报告
以下行为变更缺陷报告被追溯应用于先前发布的 C++ 标准。
DR | 应用于 | 已发布的行为 | 正确的行为 |
---|---|---|---|
LWG 2437 | C++98 | *r 要求为 reference |
输出迭代器不需要 |
LWG 3420 | C++20 | 仅供参考的概念首先检查 copyable |
仅当 requires 表达式产生 true 时才检查 copyable |
[编辑] 参见
(C++20) |
指定类型的对象可以递增和解引用 (概念) |
迭代器库 | 为迭代器、迭代器 traits、适配器和实用函数提供定义 |