I have codes like this:
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;
}
Run it, and find that sometimes it never ends, sometimes it prints extremely large or small numbers, sometimes it throws "heap-buffer-overflow". Can anyone explain it?