【问题标题】:What is the difference between it.first and it->first?it.first 和 it->first 有什么区别?
【发布时间】:2020-05-14 21:21:17
【问题描述】:
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-&gt;secondit-&gt;first

【问题讨论】:

    标签: c++ c++11 hashmap


    【解决方案1】:

    在第一个循环中,您使用 迭代器 来迭代容器 M。迭代器模拟指针,并且必须取消引用才能给出迭代器“指向”的值。事实上,对于那个循环,it-&gt;first(*it).first 是完全一样的。

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

    【讨论】:

      【解决方案2】:

      基本上,您使用. 运算符来访问对象的成员,而it-&gt;first 仅表示(*it).first。所以it是一个指向你的变量的指针,它有一个成员first,所以要访问first,你只需取消引用指针然后使用.来访问成员。 现在,如果 it 是您的变量而不是指向变量的指针,那么您可以简单地通过 it.first 访问其成员 first

      【讨论】:

        猜你喜欢
        • 2021-02-20
        • 1970-01-01
        • 2015-05-23
        • 2014-08-30
        • 1970-01-01
        • 2015-11-10
        • 2018-01-28
        • 2017-12-16
        相关资源
        最近更新 更多