次の方法で共有


反復子

STL 機能は、反復子に機能するシーケンスとさまざまなアルゴリズム間を仲介する幅広いを使用します。 反復子の型 (またはプレフィックス) の名前は、その型に必要な反復子カテゴリを示します。 生成する機能の順序で、カテゴリは次のようにここにまとめられています:

  • 出力。 出力反復子 X はその値 V によって格納される間接だけを持つことができます。として次のストアの前にアスタリスク (*XC++ = V) (*X = V、++X)、インクリメントされなければ (*X = V、X++)。

  • 入力。 入力反復子 X はシーケンスの終了を示す単一値を表すことができます。 入力反復子がシーケンス終端の値に等しい場合、としてその値 V からアクセスされる間接がいくつでも格納できますV = (*X)。 シーケンスにおける次の値または末尾を管理するには、C++Xのように、X++、またはインクリメントします (V = *X++)。 入力反復子のコピーをインクリメントすれば、もう一方のコピーはいずれも安全に比較方法、逆参照されるか、後でインクリメントすることはできません。

  • 前方。 前方反復子 X は読み取り用に書き込むための出力反復子または入力反復子の代わりに使用できます。 ただし、できます (V で前方反復子によって、(で*X = V) 記述する内容を = *X)。 また、それぞれ個別に参照解除され、インクリメントすることができる前方反復子の複数のコピーを実行することができます。

  • 双方向。 双方向の反復子 X は前方反復子の代わりに使用できます。 ただし、として双方向の反復子は、デクリメントすることができます。。X、X。、(V =X*。).

  • ランダム アクセス。 ランダム アクセス反復子 X は双方向の反復子の代わりに使用できます。 オブジェクト ポインターの場合、多くランダム アクセス反復子の同じ整数算術演算を実行できます。 Nでは、整数のオブジェクト、xN[] x + N、xを作成できます。 - Nと N + X。

オブジェクト ポインターがランダム アクセス反復子またはそのほかの反復子の位置が取得できることに注意してください。 すべての反復子は、割り当てられたまたはコピーできます。 これらは、参照して軽量オブジェクトと仮定し、頻繁に渡され、返されます。 有効な反復子で発生した場合、前に説明した操作によって例外をスローすることができない場合もあります。

反復子カテゴリの階層は、3 種類のシーケンスが表示されるため、まとめることができます。 シーケンスに対する書き込み専用モードで、:を使用できます。

output iterator
   -> forward iterator
   -> bidirectional iterator
   -> random-access iterator

右矢印の基準が「置き換えることができます」。出力反復子を求めるどのアルゴリズムが前方反復子など、別の方法を適切に使用する必要があります。

シーケンスへの読み取り専用アクセスが必要な場合は、:を使用できます。

input iterator
   -> forward iterator
   -> bidirectional iterator
   -> random-access iterator

入力反復子は、すべてのカテゴリの最も弱いです (この場合。

さらに、シーケンスへの読み取り/書き込みアクセスが必要な場合は、:を使用できます。

forward iterator
   -> bidirectional iterator
   -> random-access iterator

オブジェクト ポインターはランダム アクセス反復子として常に実行して、指定したシーケンスに対する適切な読み取り/書き込みアクセスをサポートする反復子のカテゴリとして実行できます。

オブジェクト ポインター以外の反復子 Iterator は、特化 **iterator_traits<Iterator>**で必要な型を定義する必要があります。 これらの要件がパブリックな基本クラス 反復子Iterator を派生することで満たすことができることに注目してください。

反復子の「代数学」は標準テンプレート ライブラリは、他のすべての基本です。 各反復子カテゴリの約束と制限を理解することが重要で、反復子が STL コンテナーおよびアルゴリズムがどのように使用するか参照するです。

注意

また、STL コレクションを反復処理するために 各について、 を使用できます。詳細については、「方法: それぞれのの STL のコレクションを反復処理します」を参照してください。

Visual C++ は、チェック アウトしたコンテナーの境界を上書きしないようにするために反復子とデバッグ反復子を提供します。 詳細については、「チェックを行う反復子」および「反復子のデバッグのサポート」を参照してください。

参照

関連項目

標準テンプレート ライブラリ

C++ 標準ライブラリ内のスレッド セーフ