STL標準ライブラリ(一)---反復器inerators(1)について


反復器---inerators
反復器は設計モードの1つであり、具体的には、ある集合の各要素に順次アクセスすることができ、集合の内部要素の詳細を暴露する必要がない方法があり、この表現は反復である.
反復の思想は後に多くのプログラミング言語に収録され、例えばpythonfor ... in ...文は実際には反復器である.もちろん、c++11の最新の規格では、反復のオリジナルサポートも提供されている.
STLプログラムを作成するとき、反復器は非常に使用頻度が高いです.例えば、次のような使い方を使ったことがあります.
int a[5]={1,2,3,4,5};
vector<int> list(a,a+5);

vector<int>::iterator it;
for (it=vector.begin();it!==vector.end();it++)
{
    cout << *it << endl;
}

int は、 のタイプに に できます.プログラムは する はありません.これが です. は の の を し、 の への アクセスを します.
の では,まず2つの を しなければならない.
パラメータのタイプ の りタイプ パラメータのタイプ
の では、 のタイプもあります. えば、 の では、 のタイプはintです.もちろん、 のタイプに えることもできますが、 の ではどのようにこのタイプを っていますか.あなたはintというタイプを えていませんが、STLはどのようにあなたのタイプを っていますか?ここでは テンプレートのパラメータ を いたが,この を せば にはそうである.
まず、 の はvoid func(type it)で、 たちは を きました.

template<class I>
void func(I it)
{
    //do some thing
    __func(it,*it);
}

に、 の をもう1つ
template<class I,class T>
void __func(I it,T t)
{
    T tmp;
    //        

}

int main()
{
    int i;
    func(&i);
}

main び しfuncの 、Iはint*タイプ、func び し__funcの 、__func(int* it,int t)になります.この 、__func でiのタイプintが られます. そうに えますが、c++の テンプレートをよく すればこのやり が できます. に されたfunc は, には されたタイプを らなくても,__funcで にこのタイプを し,それに することを い, も の を いて の を に すようにした.
の りタイプ
しかし、これは ではありません. の では、パラメータを すのではなく、この を す がある があります.また、この り も にタイプが されていないため、 タイプ が です. タイプ とは ですか.このように:

temlate<class T>
struct MyIt{
    typedef T new_type;
};
//         
template<class I>
typename I::new_type func(I it){ ... }

,OK, 。

, , , , 。