C++ 概念: InputIterator
来自cppreference.com
输入迭代器 (InputIterator
) 是能从所指向元素读取的迭代器 (Iterator
) 。输入迭代器 (InputIterator
) 仅保证单趟算法的合法性:一旦 InputIterator
i 被自增,则所有其先前值的副本都可能变得非法。
[编辑] 要求
若满足下列条件,则类型 It
满足输入迭代器 (InputIterator
)
并给定
-
i
和j
, It 或 const It 类型的值 -
reference
, std::iterator_traits<It>::reference 所指代的类型 -
value_type
, std::iterator_traits<It>::value_type 所指代的类型
则下列表达式必须合法且拥有其指定的效应
表达式 | 返回 | 等价表达式 | 注意 |
---|---|---|---|
i != j | 可按语境转换到 bool | !(i == j) | 前提条件: (i, j) 在 == 的定义域中。 |
*i | reference ,可转换到 value_type | 若 i == j 与 (i, j) 在 == 的定义域中,则这等价于 *j 。 |
前提条件: i 可解引用。 表达式 (void)*i, *i 等价于 *i 。 |
i->m | (*i).m | 前提条件: i 可解引用。 | |
++i | It& |
前提条件: i 可解引用 后置条件: i 可解引用或 i 为尾后。 后置条件:任何 i 先前的值副本不要求可解引用或在 == 的定义域内。 | |
(void)i++ | (void)++i | ||
*i++ | 可转换到 value_type | value_type x = *i; ++i; |
[编辑] 注意
“在 ==
的定义域内”表示二个迭代器的值间定义了相等比较。对于输入迭代器,相等比较不需要对所有值定义,且 ==
的定义域中的值的集合可以随时改变。
输入迭代器的 reference 类型不与向前迭代器 (ForwardIterator
) 一样必须是引用类型:解引用输入迭代器可以返回代理对象或以值返回 value_type 本身(如在 std::istreambuf_iterator 的情况)。
[编辑] 参阅
指定类型为输入迭代器,即能读其所引用值,且它能前后自增 (概念) |