gpt4 book ai didi

c++11 - 为什么这是一个无限循环

转载 作者:行者123 更新时间:2023-12-05 01:38:11 25 4
gpt4 key购买 nike

我在下面使用 STL 声明了一个 map 并在其中插入了一些值。

#include<bits/stdc++.h>
int main()
{


map<int,int> m;
m[1]=1;
m[2]=1;
m[3]=1;
m[4]=1;
m[5]=1;
m[6]=1;

for(auto it=m.begin();it!=m.end();)
{
cout<<it->first<<" "<<it->second<<endl;
it=it++;
}

return 0;
}

当我执行上面编写的代码时,它以无限循环告终。有人可以告诉我为什么这样做吗?我正在递增迭代器 it 的值,然后将其存储在其中,下次执行循环时它应该递增,最终它应该正常终止。我错了吗?

最佳答案

错误的代码是 it = it++;。这是未定义的行为!因为它没有定义,所以当它增加时,在你的情况下它会在再次分配给它自己之前增加,它在增加之前的值会再次分配给它所以它保持在第一个位置。 正确的行应该是it =++it;或者只是++it;/it++;,因为它会改变自己。

编辑

只有内置类型未定义,但在这里由 STL 中 map 的源代码定义。

关于c++11 - 为什么这是一个无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45522924/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com