嵌套模板的迭代器

时间:2013-03-22 22:53:11

标签: c++ templates iterator

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

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

4 个答案:

答案 0 :(得分:4)

规则是在容器提供时添加::iterator

答案 1 :(得分: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 :(得分:2)

只需添加::iterator

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

答案 3 :(得分: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允许您让编译器推导出迭代器的类型:

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

上述代码段的最后一行相当于:

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