Namespaces
Variants

C++ named requirements: LegacyIterator

From cppreference.net
C++ named requirements

LegacyIterator 要求描述了可用于标识和遍历容器元素的类型。

LegacyIterator 是其他迭代器类型所使用的基础要求集合: LegacyInputIterator LegacyOutputIterator LegacyForwardIterator LegacyBidirectionalIterator LegacyRandomAccessIterator 。迭代器可以被视为指针的抽象。

所有迭代器类别仅要求那些能在常数时间(均摊)内实现的功能。因此,迭代器的需求表 与概念定义 (since C++20) 均不规定复杂度。

目录

要求

类型 It 满足 LegacyIterator

表达式 返回类型 前置条件
* r 未指定 r 满足 可解引用 要求
++ r It & r 满足 可递增 要求(表达式 ++ r 的行为已定义)

概念

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

template < class I >

concept __LegacyIterator =
requires ( I i )
{
{ * i } - > __Referenceable ;
{ ++ i } - > std:: same_as < I & > ;
{ * i ++ } - > __Referenceable ;

} && std:: copyable < I > ;

其中仅用于说明的概念 __Referenceable < T > 当且仅当 T & 是有效类型时得到满足(特别地, T 不能是 void )。

(C++20 起)

注释

术语说明:下表展示了本网站使用的名称与对应的C++标准名称(含义相同)。 “Legacy”(及“Cpp17”)前缀强调与C++20之前标准的兼容性,用于区分这些要求与C++20引入的新 迭代器概念

cppreference 命名 C++ 标准命名 C++20 迭代器概念
LegacyIterator Cpp17Iterator input_or_output_iterator
LegacyInputIterator Cpp17InputIterator input_iterator
LegacyOutputIterator Cpp17OutputIterator output_iterator
LegacyForwardIterator Cpp17ForwardIterator forward_iterator
LegacyBidirectionalIterator Cpp17BidirectionalIterator bidirectional_iterator
LegacyRandomAccessIterator Cpp17RandomAccessIterator random_access_iterator
LegacyContiguousIterator [1] contiguous_iterator
  1. 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

参见

指定该类型对象可被递增和解引用
(概念)
迭代器库 提供迭代器、迭代器特征、适配器及工具函数的定义