命名空间
变体
操作

C++ 命名要求: LegacyIterator

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




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

 

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

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

所有迭代器类别都只要求在给定类别下以常数时间(均摊)可实现的功能。因此,迭代器的要求表和概念定义(C++20 起)不指定复杂度。

目录

[编辑] 要求

如果类型 It 满足 LegacyIterator,则

  • 类型 It 满足 CopyConstructible,并且
  • 类型 It 满足 CopyAssignable,并且
  • 类型 It 满足 Destructible,并且
  • 类型 It 满足 Swappable,并且
  • std::iterator_traits<It> 具有成员 typedef 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>;

其中,仅当 T& 是有效类型(特别是 T 不能是 void)时,内部概念 __Referenceable<T> 才满足。

(C++20 起)

[编辑] 缺陷报告

下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。

缺陷报告 应用于 发布时的行为 正确的行为
LWG 2437 C++98 要求 *rreference 对输出迭代器不要求
LWG 3420 C++20 内部概念首先检查 copyable 只有当 requires 表达式为真时才检查 copyable

[编辑] 参阅

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