命名空间
变体
操作

C++ 命名要求: LegacyInputIterator

来自 cppreference.cn
 
 
C++ 命名要求
基本
类型属性
全库范围




Container(容器)
容器元素
迭代器 (Iterator)
LegacyInputIterator(传统输入迭代器)
流 I/O
格式化器
(C++20)
随机数
并发
(C++11)
Ranges
多维视图
其他

 

一个 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 是尾后迭代器。
  • 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>

concept __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++ 标准。

缺陷报告 应用于 发布时的行为 正确的行为
LWG 98 C++98 要求 *i++ 的返回类型为 T 它可以是任何可转换为 T 的类型
LWG 2114
(P2167R3)
C++98 转换为 bool 的能力太弱
未能反映实现预期
要求已加强

[编辑] 参阅

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