for(auto it = M.begin(); it!=M.end();it++)
{
cout<<it->first<<" "<<it->second<<"\n";
}上面的代码工作得很好但是,
for(auto it : M)
{
if(it->second == 1) return it->first;
}这给了我一个错误。
为什么我必须使用it.second和it.first而不是it->second和it->first
发布于 2020-05-14 21:24:59
在第一个循环中,使用迭代器对容器M进行迭代。迭代器模拟指针,并且必须取消引用才能给出迭代器“指向”的值。实际上,对于这个循环,it->first与(*it).first是完全相同的。
在第二个循环中,遍历容器M中的值。循环本身在内部使用迭代器,并为您取消它们。本参考关于“基于范围的for循环”可能会对您有所帮助。
发布于 2020-05-14 21:33:33
基本上,您可以使用.操作符来访问对象的成员,而it->first只是指(*it).first。因此,it是一个指向变量的指针,该变量有一个成员first,因此要访问first,只需取消指针的引用,然后使用.访问成员。现在,如果it是您的变量,而不是指向该变量的指针,那么您可以通过it.first访问它的成员first。
https://stackoverflow.com/questions/61807613
复制相似问题