C++ named requirements: LegacyInputIterator
一个 LegacyInputIterator 是能够读取所指元素的 LegacyIterator 。 LegacyInputIterator 仅保证在单趟算法中有效:一旦 LegacyInputIterator i 被递增,其先前值的所有副本可能都会失效。
目录 |
要求
| 类型 | 定义 |
X
|
输入迭代器类型 |
T
|
X
的
值类型
(即
std::
iterator_traits
<
X
>
::
value_type
)
|
R
|
std:: iterator_traits < X > :: reference |
| 值 | 定义 |
| i , j |
类型为
X
或
const
X
的值
|
| r |
类型为
X&
的值
|
| 其他 | 定义 |
m
|
可能表示数据成员或成员函数的标识符 |
X
满足
LegacyInputIterator
的条件是当且仅当满足以下所有要求:
-
X满足 LegacyIterator 要求。 -
X满足 EqualityComparable 要求。 - 以下表达式格式正确且具有指定语义:
| 表达式 | 类型 | 语义 | |||||
|---|---|---|---|---|---|---|---|
| i ! = j |
|
前置条件 | i 与 j 在 == 的 定义域 内。 | ||||
| 效果 | 等价于 ! ( i == j ) 。 | ||||||
| * i |
R
,可转换为
T
|
前置条件 | i 是 可解引用 的。 | ||||
| 效果 |
|
||||||
| i - > m | 前置条件 | i 是可解引用的。 | |||||
| 效果 | 等价于 ( * i ) . m 。 | ||||||
| ++ r |
X&
|
前置条件 | r 是可解引用的。 | ||||
| 后置条件 |
|
||||||
| ( void ) r ++ | 效果 | 等价于 ( void ) ++ r 。 | |||||
| * r ++ |
可转换为
T
|
效果 | 等价于 T x = * r ; ++ r ; return x ; 。 | ||||
相等性域
术语 the domain of == 用于表示通常数学意义上的值域,即能够使用 == 进行比较的数值集合。该集合可能随时间变化。
每个算法对其使用的迭代器值的等价域提出了额外要求。这些要求可以从算法对 == 和 ! = 运算符的使用方式推导得出。
注释
对于非
LegacyForwardIterator
的输入迭代器
X
,
std::
iterator_traits
<
X
>
::
reference
不必是引用类型:解引用输入迭代器可能返回代理对象,或通过值返回
std::
iterator_traits
<
X
>
::
value_type
本身(如
std::istreambuf_iterator
的情况)。
概念为定义 std::iterator_traits ,定义了以下仅用于说明的概念。
其中仅用于说明的概念
|
(自 C++20 起) |
缺陷报告
以下行为变更缺陷报告被追溯应用于先前发布的C++标准。
| 缺陷报告 | 适用范围 | 发布时行为 | 正确行为 |
|---|---|---|---|
| LWG 98 | C++98 |
要求
*
i
++
的返回类型必须是
T
|
可以是任何可转换为
T
的类型
|
|
LWG 2114
( P2167R3 ) |
C++98 |
转换为
bool
的要求过于宽松,
无法反映实现预期 |
强化了相关要求 |
参见
|
(C++20)
|
指定某个类型为输入迭代器,即其引用值可被读取且支持前置与后置递增操作
(概念) |
| 迭代器库 | 提供迭代器、迭代器特征、适配器及工具函数的定义 |