命名空间
变体
操作

C++ 命名要求: LegacyIterator

来自 cppreference.cn
< cpp‎ | named req
 
 
C++ 命名要求
 

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>;

其中,仅供参考的概念 __Referenceable<T> 当且仅当 T& 是有效类型时才满足(特别是,T 不得为 void)。

(C++20 起)

[编辑] 缺陷报告

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

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

[编辑] 参见

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