命名空间
变体
操作

C++ 命名需求: LegacyIterator

来自 cppreference.com
 
 
C++ 命名需求
 

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

LegacyIterator 是其他迭代器类型使用的基本需求集:LegacyInputIteratorLegacyOutputIteratorLegacyForwardIteratorLegacyBidirectionalIterator,以及 LegacyRandomAccessIterator。迭代器可以被认为是指针的抽象。

所有类别的迭代器仅要求对于给定类别而言可以在恒定时间(摊销)内实现的函数。因此,迭代器需求表 和概念定义 (自 C++20 以来)不指定复杂性。

内容

[编辑] 需求

类型 It 满足 LegacyIterator,如果

  • 类型 It 满足 CopyConstructible,并且
  • 类型 It 满足 CopyAssignable,并且
  • 类型 It 满足 Destructible,并且
  • 类型 It 满足 Swappable,并且
  • std::iterator_traits<It> 具有成员类型定义 value_type(直到 C++20)difference_typereferencepointeriterator_category,并且
  • 给定 r,类型 It 的左值,以下表达式必须有效,并且具有其指定的效果
表达式 返回类型 前置条件
*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++ 标准。

DR 应用于 已发布的行为 正确的行为
LWG 2437 C++98 *r 需要是 reference 对于输出迭代器不需要
LWG 3420 C++20 仅供说明的概念首先检查 copyable 仅当 requires 表达式产生 true 时才检查 copyable

[编辑] 另请参阅

指定类型的对象可以递增和解引用
(概念) [编辑]
迭代器库 提供对迭代器、迭代器特征、适配器和实用函数的定义