C++ named requirements: LegacyIterator
LegacyIterator 要求描述了可用于标识和遍历容器元素的类型。
LegacyIterator 是其他迭代器类型所使用的基础要求集合: LegacyInputIterator 、 LegacyOutputIterator 、 LegacyForwardIterator 、 LegacyBidirectionalIterator 和 LegacyRandomAccessIterator 。迭代器可以被视为指针的抽象。
所有迭代器类别仅要求那些能在常数时间(均摊)内实现的功能。因此,迭代器的需求表 与概念定义 (since 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,且 -
给定类型为
It的左值 r ,以下表达式必须有效并具有其指定效果:
| 表达式 | 返回类型 | 前置条件 |
|---|---|---|
| * r | 未指定 | r 满足 可解引用 要求 |
| ++ r | It & | r 满足 可递增 要求(表达式 ++ r 的行为已定义) |
概念为定义 std::iterator_traits ,特定义以下仅用于说明的概念。
其中仅用于说明的概念
__Referenceable
<
T
>
当且仅当
T
&
是有效类型时得到满足(特别地,
|
(C++20 起) |
注释
术语说明:下表展示了本网站使用的名称与对应的C++标准名称(含义相同)。 “Legacy”(及“Cpp17”)前缀强调与C++20之前标准的兼容性,用于区分这些要求与C++20引入的新 迭代器概念 。
- ↑ LegacyContiguousIterator 类别仅在 C++17 中正式规范,但 std::vector 、 std::basic_string 、 std::array 和 std::valarray 的迭代器,以及指向 C 数组的指针在 C++17 之前的代码中通常被视作独立的类别。
缺陷报告
以下行为变更缺陷报告被追溯应用于先前发布的C++标准。
| 缺陷报告 | 适用标准 | 发布时行为 | 正确行为 |
|---|---|---|---|
| LWG 2437 | C++98 |
*
r
被要求必须是
reference
|
输出迭代器无需此要求 |
| LWG 3420 | C++20 |
仅用于说明的概念会先检查
copyable
|
仅当requires表达式返回true时才检查
copyable
|
参见
|
(C++20)
|
指定该类型对象可被递增和解引用
(概念) |
| 迭代器库 | 提供迭代器、迭代器特征、适配器及工具函数的定义 |