我有这样的代码:
vector<int> v = {1,-2,-2,3};
int gsum = 0; //global sum
for(auto i=v.begin(); i!=v.end(); ){
if(*i >= 0){
gsum += *i;
v.erase(i,i+1);
}else{
v.insert(i, gsum);
gsum = 0;
i+=2;
}
}for (auto i : v) {
cout<<i<<ends;
}
运行它,发现有时它永远不会结束,有时会打印出非常大或小的数字,有时会抛出“堆-缓冲区-溢出”。有人可以解释吗?
第v.erase(i,i+1)
行使所有迭代器无效为v
-包括您的for
循环用于迭代容器的迭代器。因此,在该行之后,您的循环使用了无效的迭代器,并且您的代码具有undefined behaviour。