命名空间
变体
操作

C++ 具名要求: LegacyInputIterator

来自 cppreference.cn
 
 
C++ 具名要求
 

LegacyInputIterator 是一个 LegacyIterator,它可以从所指向的元素读取。LegacyInputIterator 仅保证单次遍历算法的有效性:一旦 LegacyInputIterator i 递增后,其先前值的所有副本都可能失效。

目录

[编辑] 要求

类型 定义
X 一个输入迭代器类型
T X值类型 (即 std::iterator_traits<X>::value_type)
R std::iterator_traits<X>::reference
定义
i, j 类型为 Xconst X 的值
r 类型为 X& 的值
其他 定义
m 可能表示数据成员或成员函数的标识符


如果满足以下所有条件,则 X 满足 LegacyInputIterator

 表达式  类型 语义
i != j
满足 BooleanTestable 的类型 (C++20 前)
建模 boolean-testable 的类型 (C++20 起)
先决条件 ij == 中。
效果 等价于 !(i == j)
*i R,可转换为 T 先决条件 i可解引用的
效果
  • 表达式 (void)*i, *i 等价于 *i
  • 如果 ij== 的域中,且 i == j,则 *i 等价于 *j
i->m 先决条件 i 是可解引用的。
效果 等价于 (*i).m
++r X& 先决条件 r 是可解引用的。
后置条件 
  • r 是可解引用的或 r 是过尾 (past-the-end) 的。
  • r 先前值的任何副本不再需要是可解引用的或在 == 的域中。
(void)r++ 效果 等价于 (void)++r
*r++ 可转换为 T 效果 等价于 T x = *r; ++r; return x;

[编辑] 相等域

术语== 的域 在通常的数学意义上使用,表示可以使用 == 进行比较的值的集合。此集合可能会随时间变化。

每种算法都对其使用的迭代器值的相等域施加额外的要求。这些要求可以从算法对 ==!= 的使用中推断出来。

[编辑] 注解

对于不是 LegacyForwardIterator 的输入迭代器 Xstd::iterator_traits<X>::reference 不必是引用类型:解引用输入迭代器可能会按值返回代理对象或 std::iterator_traits<X>::value_type 本身(如 std::istreambuf_iterator 的情况)。

概念

对于 std::iterator_traits 的定义,定义了以下仅用于说明的概念。

template<class I>

概念 __LegacyInputIterator =
__LegacyIterator<I> && std::equality_comparable<I> && requires(I i)
{
    typename std::incrementable_traits<I>::difference_type;
    typename std::indirectly_readable_traits<I>::value_type;
    typename std::common_reference_t<std::iter_reference_t<I>&&,
                                     typename std::indirectly_readable_traits<I>::value_type&>;
    *i++;
    typename std::common_reference_t<decltype(*i++)&&,
                                     typename std::indirectly_readable_traits<I>::value_type&>;
    requires std::signed_integral<typename std::incrementable_traits<I>::difference_type>;

};

其中仅用于说明的概念 __LegacyIteratorLegacyIterator 中描述。

(C++20 起)

[编辑] 缺陷报告

以下行为变更缺陷报告被追溯应用于先前发布的 C++ 标准。

DR 应用于 已发布行为 正确行为
LWG 98 C++98 *i++ 的返回类型必须为 T 它可以是任何可转换为 T 的类型
LWG 2114
(P2167R3)
C++98 bool 的可转换性太弱
反映实现的期望
要求已加强

[编辑] 参见

指定类型为输入迭代器,即可以读取其引用值,并且可以进行前置和后置递增
(概念) [编辑]
迭代器库 提供迭代器、迭代器特征、适配器和实用函数的定义