C++ 命名需求: LegacyIterator
来自 cppreference.com
The LegacyIterator 需求描述了可用于识别和遍历容器元素的类型。
LegacyIterator 是其他迭代器类型使用的基本需求集:LegacyInputIterator,LegacyOutputIterator,LegacyForwardIterator,LegacyBidirectionalIterator,以及 LegacyRandomAccessIterator。迭代器可以被认为是指针的抽象。
所有类别的迭代器仅要求对于给定类别而言可以在恒定时间(摊销)内实现的函数。因此,迭代器需求表 和概念定义 (自 C++20 以来)不指定复杂性。
内容 |
[编辑] 需求
类型 It 满足 LegacyIterator,如果
- 类型 It 满足 CopyConstructible,并且
- 类型 It 满足 CopyAssignable,并且
- 类型 It 满足 Destructible,并且
- 类型 It 满足 Swappable,并且
- std::iterator_traits<It> 具有成员类型定义
value_type
(直到 C++20),difference_type
,reference
,pointer
和iterator_category
,并且 - 给定 r,类型 It 的左值,以下表达式必须有效,并且具有其指定的效果
表达式 | 返回类型 | 前置条件 |
---|---|---|
*r | 未指定 | r 是 可解引用 |
++r | It& | r 是可递增的(表达式 ++r 的行为已定义) |
概念对于 std::iterator_traits 的定义,定义了以下仅供说明的概念。
其中仅供说明的概念 __Referenceable<T> 满足,当且仅当 T& 是有效的类型(特别地,T 不能是 void)。 |
(自 C++20 以来) |
[编辑] 缺陷报告
以下行为变更缺陷报告已追溯应用于先前发布的 C++ 标准。
DR | 应用于 | 已发布的行为 | 正确的行为 |
---|---|---|---|
LWG 2437 | C++98 | *r 需要是 reference |
对于输出迭代器不需要 |
LWG 3420 | C++20 | 仅供说明的概念首先检查 copyable |
仅当 requires 表达式产生 true 时才检查 copyable |
[编辑] 另请参阅
(C++20) |
指定类型的对象可以递增和解引用 (概念) |
迭代器库 | 提供对迭代器、迭代器特征、适配器和实用函数的定义 |