ネストされたテンプレートの反復子を作成するための一般的なルールは何ですか? たとえば、次のテンプレートの反復子はどのように作成しますか。
map<int, pair<string, int> > M;
map<map<int, string>, map<string, pair<int, int> > N;
::iterator
ルールは、コンテナーがそれを提供する場合に追加しています。
あらゆる種類のコンテナへのイテレータのように:
map<int, pair<string,int>>::iterator it1; // or const_iterator
map<map<int,string>, map<string, pair<int,int>>::iterator it2; // or const_iterator
追加するだけ::iterator
map<int, pair<string,int>>::iterator
map<map<int,string>, map<string, pair<int,int>>::iterator
標準 C++ コンテナーは、参照可能な型エイリアス と呼ばれるiterator
ものを定義const_iterator
します。
たとえば、タイプが次の場合:
map<int, pair<string,int>>
次に、次のようにして、イテレータの型をその要素に取得できます。
map<int, pair<string,int>>::iterator
// ^^^^^^^^^^
または、定数イテレータが必要な場合:
map<int, pair<string,int>>::const_iterator
// ^^^^^^^^^^^^^^^^
ただし、C++11 では、多くの場合、これを行う必要はありませんauto
。コンパイラに反復子の型を推測させることができるためです。
map<int, pair<string,int>> m;
// Fill in the map...
auto i = m.begin();
上記のスニペットの最後の行は、次と同等です。
map<int, pair<string,int>>::iterator i = m.begin();