特殊的C++vector容器迭代器失效情况:vector iterator not incrementable
2023-12-31 22:27:08
众所周知,容器删除元素会使当前使用的迭代器失效,除了重新分配迭代器,还可以使用下面的写法,使删除元素时重新赋值一个有效的迭代器
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里面容器被改变了,导致迭代器失效!
文章来源:https://blog.csdn.net/m0_60352504/article/details/135319978
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!