它首先和它>优先有什么区别?

What is the difference between it.first and it->first?

本文关键字:什么 区别 gt      更新时间:2023-10-16
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.secondit.first而不是it->secondit->first

在第一个循环中,使用迭代器遍历容器M。迭代器模拟指针,并且必须取消引用才能给出迭代器"指向"的值。其实,对于那个循环,it->first真的和(*it).first一样。

在第二个循环中,循环访问容器中的M。循环本身在内部使用迭代器,并为您取消引用它们。有关"基于范围的for循环"的参考可能会对您有所帮助。

基本上你使用.运算符来访问对象的成员,it->first只是意味着(*it).first。所以it是一个指向你的变量的指针,它有一个成员first,所以要访问first,你只需取消引用指针,然后使用.来访问成员。 现在,如果it是您的变量而不是指向该变量的指针,那么您只需通过it.first访问其成员first即可。