for(auto it = M.begin(); it!=M.end();it++)
{
cout<<it->first<<" "<<it->second<<"\n";
}
上面的代码工作绝对正常But。
for(auto it : M)
{
if(it->second == 1) return it->first;
}
这给我一个错误。 为什么我必须使用 it.second
和 it.first
而不是 it->second
和 it->first
?
在第一个循环中,你使用 迭代器 遍历容器 M
. 迭代器效仿指针,并且必须去引用以给出迭代器所 "指向 "的值。事实上,对于该循环。it->first
真可谓 (*it).first
.
在第二个循环中,你在 价值观 容器中 M
. 循环本身在内部使用迭代器,并为你导出它们。这个引用 关于 "基于范围的 for
循环 "可能会帮助你。
基本上您可以使用 .
操作符来访问对象的成员和 it->first
简单地说 (*it).first
. 所以... it
是一个指向你的变量的指针,这个变量有一个成员。first
因此,要访问 first
,你只需取消引用指针,然后使用 .
来访问该成员。现在如果 it
是你的变量,而不是指向变量的指针,那么你可以简单地访问它的成员。first
通过 it.first
.