it.first和it->first的区别是什么?

问题描述 投票:0回答:1
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.secondit.first 而不是 it->secondit->first?

c++ c++11 hashmap
1个回答
7
投票

在第一个循环中,你使用 迭代器 遍历容器 M. 迭代器效仿指针,并且必须去引用以给出迭代器所 "指向 "的值。事实上,对于该循环。it->first 真可谓 (*it).first.

在第二个循环中,你在 价值观 容器中 M. 循环本身在内部使用迭代器,并为你导出它们。这个引用 关于 "基于范围的 for 循环 "可能会帮助你。


0
投票

基本上您可以使用 . 操作符来访问对象的成员和 it->first 简单地说 (*it).first. 所以... it 是一个指向你的变量的指针,这个变量有一个成员。first因此,要访问 first,你只需取消引用指针,然后使用 . 来访问该成员。现在如果 it 是你的变量,而不是指向变量的指针,那么你可以简单地访问它的成员。first 通过 it.first.

© www.soinside.com 2019 - 2024. All rights reserved.