目的:データに格納されたデータとデータの結合を低減するために、クエリを分離します
継承図:
例:
//イテレータインターフェイス定義 テンプレートを<型名T> クラスイテレータ { パブリック: 仮想BOOLのhasNext()= 0; 仮想次にT()= 0; };
//定义集合的接口 テンプレート<型名T> クラス集合 { パブリック: 仮想イテレータ<T> * createIterator()= 0; 仮想TのgetItem(INT指数)= 0。 仮想INTのgetSize()= 0; 仮想ボイドSetItem関数(T tは)= 0。 }。
//迭代器的具体实现类 テンプレート<typenameにT> クラスIteratorImp:公共イテレータ<T> { 集計<T> * P; int型のインデックス。 公共: IteratorImp(集合<T> *集計) { P =集約。 インデックス= 0; } BOOLのhasNext() { IF(指数<P->のgetSize()) { trueを返します。 } 他 { falseを返します。 } } T、次の() { P->のgetItem(インデックス++)を返します。 } }。
実装クラス設定// テンプレート<型名T> 公共集合<T>:クラスAggregateImp { ;ベクトル<T>データ :公共 イテレータ<T> * createIterator()//これは、重要なステップであり、フックのセットイテレータを セット{//イテレータを初期化し、イテレータを返す <T>(本)新しい新しいIteratorImpを返す; } TのgetItem(INTインデックス) { 戻りデータ[インデックス]; } int型のgetSize() { )(data.sizeを返します; } SetItem関数ボイド(T T) { data.push_back(T); } };
INTメイン() { 集合<整数> * D =新しいAggregateImp <整数>(); イテレータ<整数> *イテレータ= D-> createIterator(); D-> SetItem関数(1)。 D-> SetItem関数(3)。 D-> SetItem関数(4)。 D-> SetItem関数(2)。 一方、(iterator->のhasNext()) { COUT << iterator->次の()<< ENDL。 } 0を返します。 }