C++容器的迭代器失效规则是什么?
优选地以摘要列表格式.
(注意:这是Stack Overflow的C++常见问题解答的一个条目.如果你想批评在这种形式下提供常见问题解答的想法,那么发布所有这些的元数据的发布将是这样做的地方.这个问题在C++聊天室中受到监控,其中FAQ的想法一开始就出现了,所以你的答案很可能被那些提出想法的人阅读.)
我一个迭代map中C++使用for loop,但它是一个无限循环stucking。我已经搜索了其他类似的问题,最接近的是这个问题,但对那个问题的回答并没有回答我的查询,因为在那个问题中,作者正在对地图对象进行更改,但我没有对地图对象进行任何更改期间for loop。
我的代码如下(我尝试注释不同的行并发现无限循环是由第 11 行 ( else statement)引起的,但我无法弄清楚确切的问题):
int main(){
map<int,int> dic; //dic is the relevant map object
dic[0]=1; dic[1]=1; dic[2]=1; dic[3]=1; //dic = {0:1, 1:1, 2:1, 3:1}
int k=1;
int sol=0;
for(map<int,int>::iterator iter=dic.begin(); iter!=dic.end(); iter++){
int a=iter->first; int b=iter->second;
if(k==0) sol+=b*(b-1)/2;
else sol+=b*dic[a+k]; //after some trials, I found that problem is in this line but I couldn't figure out the problem
}
return sol;
}
Run Code Online (Sandbox Code Playgroud)