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

发布时间:2023年12月31日

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


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
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。