它首先和它>优先有什么区别?
What is the difference between it.first and it->first?
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
?
在第一个循环中,使用迭代器遍历容器M
。迭代器模拟指针,并且必须取消引用才能给出迭代器"指向"的值。其实,对于那个循环,it->first
真的和(*it).first
一样。
在第二个循环中,循环访问容器中的值M
。循环本身在内部使用迭代器,并为您取消引用它们。有关"基于范围的for
循环"的参考可能会对您有所帮助。
基本上你使用.
运算符来访问对象的成员,it->first
只是意味着(*it).first
。所以it
是一个指向你的变量的指针,它有一个成员first
,所以要访问first
,你只需取消引用指针,然后使用.
来访问成员。 现在,如果it
是您的变量而不是指向该变量的指针,那么您只需通过it.first
访问其成员first
即可。
相关文章:
- 向量 <int> a {N, 0} 和 int arr a[N] = {0} 的时间复杂度有什么区别
- 在 .h 文件中的类中声明静态变量和在.cpp文件中声明"global"变量有什么区别
- 我是C++编程的新手,这些代码之间有什么区别,我应该使用哪一个
- 返回常量对象引用 (getter) 和仅返回字符串有什么区别?
- Qt:remove() 和 rmdir() 有什么区别
- 这 4 个 lambda 表达式之间有什么区别?
- 将向量作为类>(值)<向量启动和向量<类>[值]有什么区别
- typedef 枚举和枚举类有什么区别?
- &C::c 和 &(C::c) 有什么区别?
- ascii 和 unicode 在处理级别有什么区别吗?
- C 中的常量限定符和 C++ 中的常量限定符有什么区别?
- "ABC" 和 "ABC" ) 在C++中有什么区别?
- 空指针常量 (nullptr)、空指针值和空成员指针值之间有什么区别?
- 引用捕获和在 lambda 中通过引用发送参数有什么区别 (C++)
- 两种访问I2C总线的方法有什么区别?
- 两种模板示例有什么区别?
- 这两种C++语法之间有什么区别?
- lua 5.0.2 模块和 5.3.5 有什么区别?
- C++中"typedef"、"using"、"namespace"和"using namespace"有什么区别?
- std::enable_if 和 std::enable_if_t 有什么区别?