2013-03-22 68 views
-4

创建嵌套模板的迭代器的一般规则是什么?例如,你将如何为以下模板创建一个迭代器:嵌套模板的迭代器

map<int, pair<string, int> > M; 
map<map<int, string>, map<string, pair<int, int> > N; 

回答

4

的规则增加了::iterator如果容器提供它。

2

就像迭代任何类型的容器:

map<int, pair<string,int>>::iterator it1; // or const_iterator 
map<map<int,string>, map<string, pair<int,int>>::iterator it2; // or const_iterator 
2

只需添加::iterator

map<int, pair<string,int>>::iterator 
map<map<int,string>, map<string, pair<int,int>>::iterator 
2

标准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一llows你让编译器推断迭代器的类型:

map<int, pair<string,int>> m; 
// Fill in the map... 
auto i = m.begin(); 

上面代码片段的最后一行是等价于:

map<int, pair<string,int>>::iterator i = m.begin();