2014-02-27 124 views
1

如已知下面的代碼被用於迭代地圖在C++C++迭代地圖

for (std::map<char,int>::iterator it=mymap.begin(); it!=mymap.end(); ++it) 
{ 
    std::cout << itr->first << " => " << itr->second << '\n'; 
} 

ITR被聲明爲的std ::地圖::迭代。成員的第一個和第二個既不在std::map也不在std::iterator中聲明。那麼如何訪問?

回答

8

std::map的元素是std::pair<key_type, mapped_type>,因此,取消引用地圖迭代器會爲您提供對其中之一的引用。

這是std::pair類模板,它有firstsecond成員。

2

迭代器背後的基本想法是,它們是用於訪問數據,即表現得像指針「神奇」的對象做一個陣列上 - 即你使用的算術運算符(如++--)移動並取消引用(使用*->)來訪問數據。

所以,itr是「喜歡」的指針std::pair<char, int>,這樣就可以通過操作者*(其產生的鍵/值pair)或與->運算符,如在例如訪問數據解引用它。