【发布时间】:2020-10-14 16:49:39
【问题描述】:
int main()
{
map<float,float>m;
//input some value in m
for(auto it=m.end();it!=m.begin();it--)
{
cout<<it.first<<" "<<it.second;
}
return 0;
}
如果我使用下面的代码代替上面的代码,上面的代码现在不起作用,它工作得很好。我知道为什么会这样,请告诉我有什么区别。
int main()
{
map<float,float>m;
//Input some value in m
for(auto it:m)
{
cout<<it.first<<" "<<it.second;
}
return 0;
}
【问题讨论】:
-
您的意思是除了循环的方向之外,您不会在第一个循环中使用地图中的第一个元素,第二个循环迭代的是 values 而不是迭代器,在第一个循环中您使用了错误的成员访问器运算符,并且您在第一个循环中取消引用
end迭代器(这会导致 未定义的行为)? -
迭代器必须被取消引用。
it->ff -
根据定义,只有第二个是“基于范围的”。
-
@HolyBlackCat 在这两种情况下
auto it类型有什么区别 -
是的,在第一个中它被推导出为
map<float,float>::iterator(因此您需要使用->而不是.),在第二个中它使用 取消引用map<float,float>::iterator,即pair<const float, float>。
标签: loops c++11 iterator ranged-loops