2013-03-22 125 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();