Namespaces
Variants

C++ named requirements: LegacyInputIterator

From cppreference.net
C++ named requirements

LegacyInputIterator は、指し示す要素から読み取り可能な LegacyIterator です。 LegacyInputIterator はシングルパスアルゴリズムに対してのみ有効性を保証します: LegacyInputIterator i がインクリメントされると、その以前の値のすべてのコピーは無効化される可能性があります。

目次

要件

定義
X 入力イテレータ型
T X 値型 (すなわち std:: iterator_traits < X > :: value_type
R std:: iterator_traits < X > :: reference
定義
i j X 型または const X 型の値
r X& 型の値
その他 定義
m データメンバまたはメンバ関数を示す可能性のある識別子


X は、以下のすべての条件を満たす場合に LegacyInputIterator を満たします:

意味論
i ! = j
BooleanTestable を満たす型 (C++20まで)
boolean-testable をモデル化する型 (C++20以降)
事前条件 i j ドメイン 内にある ==
効果 次と等価: ! ( i == j )
* i R T に変換可能 事前条件 i 間接参照可能 である。
効果
  • ( void ) * i, * i * i と等価。
  • i j == のドメイン内にあり、かつ i == j の場合、 * i * j と等価。
i - > m 事前条件 i が間接参照可能である。
効果 次と等価: ( * i ) . m
++ r X& 事前条件 r が間接参照可能である。
事後条件
  • r が間接参照可能であるか、または r が終端を超えている。
  • r の以前の値のコピーは、間接参照可能であるか、または == のドメイン内にある必要はない。
( void ) r ++ 効果 次と等価: ( void ) ++ r
* r ++ T に変換可能 効果 次と等価: T x = * r ; ++ r ; return x ;

等価性ドメイン

「the domain of == 」という用語は、通常の数学的な意味で使用され、 == を用いて比較可能な値の集合を表します。この集合は時間とともに変化する可能性があります。

各アルゴリズムは、使用するイテレータ値の等価性領域に対して追加の要件を課します。これらの要件は、アルゴリズムが == および ! = をどのように使用するかから推測できます。

注記

入力イテレータ X LegacyForwardIterator でない場合、 std:: iterator_traits < X > :: reference は参照型である必要はありません:入力イテレータの逆参照はプロキシオブジェクトを返すか、あるいは std:: iterator_traits < X > :: value_type 自体を値で返す( std::istreambuf_iterator の場合のように)ことがあります。

Concept

std::iterator_traits の定義のために、以下の説明専用コンセプトが定義される。

template < class I >

concept __LegacyInputIterator =
__LegacyIterator < I > && std:: equality_comparable < I > && requires ( I i )
{
typename std:: incrementable_traits < I > :: difference_type ;
typename std:: indirectly_readable_traits < I > :: value_type ;
typename std:: common_reference_t < std:: iter_reference_t < I > && ,
typename std:: indirectly_readable_traits < I > :: value_type & > ;
* i ++ ;
typename std:: common_reference_t < decltype ( * i ++ ) && ,
typename std:: indirectly_readable_traits < I > :: value_type & > ;
requires std:: signed_integral < typename std:: incrementable_traits < I > :: difference_type > ;

} ;

ここで説明専用コンセプト __LegacyIterator LegacyIterator で説明されている。

(C++20以降)

不具合報告

以下の動作変更の欠陥報告書は、以前に公開されたC++規格に対して遡及的に適用されました。

DR 適用対象 公開時の仕様 正しい仕様
LWG 98 C++98 * i ++ の戻り値型は T であることが要求されていた T に変換可能な任意の型でよい
LWG 2114
( P2167R3 )
C++98 bool への変換可能性は実装の期待を反映するには弱すぎた 要件を強化

関連項目

型が入力イテレータであること、つまり参照する値を読み取ることができ、前置および後置インクリメントが可能であることを指定する
(concept)
イテレータライブラリ イテレータ、イテレータ特性、アダプタ、およびユーティリティ関数の定義を提供する