ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

特殊的C++vector容器迭代器失效情况:vector iterator not incrementable

特殊的C++vector容器迭代器失效情况:vector iterator not incrementable

众所周知,容器删除元素会使当前使用的迭代器失效,除了重新分配迭代器,还可以使用下面的写法,使删除元素时重新赋值一个有效的迭代器


for(auto iter = v->begin();iter!=v->end();){if(...){//判断条件iter = v->erase(iter);//使用erase返回的迭代器重新赋值iter}else{iter++;}
}

但是我在一个程序中使用了正确写法,还是遇到了vector iterator not incrementable这个崩溃提示
原因就是我使用了嵌套的迭代器循环,大概的代码如下

void func(){for(auto iter = v->begin();iter!=v->end();){if(...){//判断条件iter = v->erase(iter);//使用erase返回的迭代器重新赋值iter}else{iter++;}}
}
void funb(){for(auto iter = v->begin();iter!=v->end();){if(...){//判断条件func();}}
}

这导致func里面是正常的迭代器循环,正常的删除了元素,而回到funb里面容器被改变了,导致迭代器失效!

返回列表