名前空間
変種
操作

C++ 名前付き要件: LegacyIterator

From cppreference.com
 
 
C++ 名前付き要件
 

LegacyIterator 要件は、コンテナの要素を識別し走査するために使用できる型を説明します。

LegacyIterator は、他のイテレータ型によって使用される要件の基本セットです:LegacyInputIteratorLegacyOutputIteratorLegacyForwardIteratorLegacyBidirectionalIterator、および LegacyRandomAccessIterator。イテレータはポインタの抽象化と考えることができます。

すべてのカテゴリのイテレータは、定数時間(償却)で実現可能な関数のみを要求します。したがって、イテレータの要件テーブルおよびコンセプト定義(C++20以降)では、複雑さは指定されていません。

目次

[編集] 要件

It は、以下の場合に LegacyIterator を満たします。

  • ItCopyConstructible を満たし、
  • ItCopyAssignable を満たし、
  • ItDestructible を満たし、
  • ItSwappable を満たし、
  • std::iterator_traits<It> はメンバ typedef value_type (C++20まで)difference_typereferencepointer、および iterator_category を持ち、
  • It 型の左辺値 r が与えられた場合、以下の式は有効であり、指定された効果を持つ必要があります。
Expression 返り値の型 事前条件
*r unspecified r間接参照可能です。
++r It& rインクリメント可能です(式 ++r の動作は定義されています)。

コンセプト

std::iterator_traits の定義のために、以下の exposition-only コンセプトが定義されています。

template<class I>

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

    } && std::copyable<I>;

ここで、提示専用コンセプト __Referenceable<T> は、T& が有効な型である(特に、Tvoid でない)場合にのみ満たされます。

(C++20以降)

[編集] 欠陥報告

以下の動作変更を伴う欠陥報告が、以前に公開されたC++標準に遡って適用されました。

DR 適用対象 公開された動作 正しい動作
LWG 2437 C++98 *rreference である必要があります。 出力イテレータには要求されません。
LWG 3420 C++20 提示専用コンセプトはまず copyable をチェックします。 copyable は、requires 式が true を返した場合にのみチェックされます。

[編集] 関連項目

ある型のオブジェクトがインクリメントおよび間接参照できることを規定する
(コンセプト) [編集]
イテレータライブラリ イテレータ、イテレータ特性、アダプタ、およびユーティリティ関数の定義を提供します。
English 日本語 中文(简体) 中文(繁體)