プログラミング方法論上の特徴でSTLのイテレータの概要を学びます

VALUE_TYPEイテレータは、例えばタイプ、対応する:ベクター<整数>を::それをイテレータ、それは実際* intで、対応するイテレータ型は、本明細書反復イテレータを指し、すなわち、本明細書,,対応型intを指す型イテレータオブジェクトのタイプ。
イテレータを使用する場合は、時々、この時間は、イテレータを取得する方法を、我々は唯一のイテレータの種類を知っている機能の使用のイテレータ型VALUE_TYPEの戻り値が必要な場合、例えば、対応するタイプのVALUE_TYPEイテレータを使用する必要があってもよいが、 VALUE_TYPE?
この問題を解決するためのSTLの方法:
STLのイテレータが定義されている場合は、ステートメントが埋め込まれている間型VALUE_TYPE、すなわち:
1つのテンプレート< クラス T>
 2  構造体イテレータ{
 3。      VALUE_TYPE Tのtypedef; // インラインVALUE_TYPEを入力宣言する
。4      T * PTR;
 5 }。

したがって、上述した要求を使用する場合は次のようであってもよいです。

1つのテンプレート< クラス I> 
 2型名:: VALUE_TYPE I // 戻り型
3。 func_exp(I ITER){
 4。     復帰 * ITER;
 5 }

テンプレートがインスタンス化される前に、私は、テンプレートのタイプだったので、コンパイラは、私が何であるかを知らないコンパイラに私を伝えること:: VALUE_TYPEを型として責任型名、、、私は私を知らない:: VALUE_TYPEはタイプを示します。

 

我々はイテレータを定義しないので、しかし、ネイティブポインタはイテレータとして、我々は、その埋め込み型のVALUE_TYPEを宣言することはできません。

それはVALUE_TYPE場合、一次ポインタとカスタムイテレータイテレータクラス型、それを得る方法を得ることができないように、すなわち、2つのケースが存在します。

 

スキルをプログラミング特性を使用し、それは上記の2つの異なる状況を解決するためのテンプレートの部分特殊化を使用して、VALUE_TYPE独立して入手することができます。

1つのテンプレート< クラスは I>
 2  構造体にiterator_traits {
 3      のtypedefはVALUE_TYPE I VALUE_TYPEをtypenameです::;
 4  };
 5  
6。テンプレート< クラス T>
 7。 構造体にiterator_traits <T *> { // イテレータとして特殊ネイティブポインタ
8      T VALUE_TYPEのtypedefは、
 9 }。

この時間VALUE_TYPEの再利用では、次のように、ネイティブポインタは、問題のVALUE_TYPEを解決するために取得しました:

1つのテンプレート< クラス T> 
 2にiterator_traits <T> :: VALUE_TYPE // 戻り値の型、にiterator_traits VALUE_TYPE型を用いて推定
3。 FUNC(T ITER){
 4。     復帰 * ITER;
 5 }

形質「の特徴抽出機」:

 

 

おすすめ

転載: www.cnblogs.com/dabai56/p/11432854.html