C++ STL のほとんどの標準コンテナは Iterator を提供します。 priority_queue などの一部のコンテナには、意味的にコンテナ内の要素の任意の走査が許可されないため、Iterator がありません。
23 の古典的なデザイン パターンの中に反復子パターンがあり、Java コレクション フレームワークもこのパターンを実装しています:
Java コード
package java.util; public interface Iterator<E> { boolean hasNext(); E next(); void remove(); }
C++ の反復子は Java より柔軟で、主に以下に反映されています:
1.java のみ Aフロントツーバックイテレータに加えて、C++ は次のようなバックツーバックイテレータも提供します。イテレータに加えて、C++ には const_iterator も用意されています。これはコレクション内のデータを読み取ることのみができますが、その値を変更することはできません。
3. Java のイテレータは 1 ステップでのみインクリメントできるようですが、C++ のイテレータは次のようになります。デバイスは、+n、-n などの算術演算を実装することもできます。これは、特定の要素をランダムに読み取る必要があるシナリオでは非常に便利ですが、算術演算をサポートしているのはベクトルの反復子だけのようです。つまり、前の例の反復子 it は、it = it+n などの演算を実行できません。これは覚えておくことが重要です。