vector.erase()删除iterator后,iterator会指向一个不可预期的地址,故需要将erase()的返回值赋值给iterator。 erase()会传回下一个iterator的pointer,若在由for循环中iter++,则会少考虑了被删除后的下一个iterator,故需加上--, 将iterator往前移,移到被删除的iterator的前一个iterator,这样for loop的++iterator才会考虑到被删除的下一个iterator。
vector<int> v1;
vector<int>::iterator iter = v1.begin();
for(; iter != v1.end;)
{
if(*iter == 0x33)
{
iter = v1.erase(iter);
}
else
{
iter++;
}
}