it.first 和 it->first 有什么区别?

Akr*_*med 2 c++ hashmap c++11

for(auto it = M.begin(); it!=M.end();it++)
    {
        cout<<it->first<<" "<<it->second<<"\n";  
    }
Run Code Online (Sandbox Code Playgroud)

上面的代码工作得很好但是,

    for(auto it : M)
    {
        if(it->second == 1) return it->first;
    }
Run Code Online (Sandbox Code Playgroud)

这给了我一个错误。

为什么我必须使用it.secondandit.first而不是it->secondand it->first

Som*_*ude 8

在第一个循环中,您使用迭代器迭代容器M。迭代器模拟指针,必须取消引用才能给出迭代器“指向”的值。事实上,对于那个循环,it->first真的和(*it).first.

在第二个循环中,您循环遍历container 中的M。循环本身在内部使用迭代器并为您取消引用它们。这个关于“基于范围的for循环”的参考可能对你有帮助。