众所周知,以下代码用于在C ++中迭代map
for (std::map<char,int>::iterator it=mymap.begin(); it!=mymap.end(); ++it)
{
std::cout << itr->first << " => " << itr->second << '\n';
}
itr 声明为 std :: map :: iterator 。第一和第二成员既不在std::map也不在std::iterator中声明。那怎么可以访问?
答案 0 :(得分:8)
std::map
的元素是std::pair<key_type, mapped_type>
,因此取消引用地图迭代器会为您提供其中一个元素的引用。
std::pair
类模板包含first
和second
成员。
答案 1 :(得分:2)
迭代器背后的基本思想是它们是用于访问数据的“神奇”对象,其行为类似于数组上的指针 - 即您使用算术运算符(例如++
和--
)来移动并解除引用(使用*
和->
)来访问数据。
因此,itr
“喜欢”指向std::pair<char, int>
的指针,因此您可以通过*
运算符访问取消引用它的数据(生成键/值{{1 }}或使用pair
运算符,如您的示例所示。