STL標準ライブラリ(一)---反復器inerators(1)について
反復器は設計モードの1つであり、具体的には、ある集合の各要素に順次アクセスすることができ、集合の内部要素の詳細を暴露する必要がない方法があり、この表現は反復である.
反復の思想は後に多くのプログラミング言語に収録され、例えば
python
のfor ... 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, 。
, , , , 。