特殊的Cpp vector容器迭代器失效情况 vector iterator not incrementable

⌚Time: 2023-12-31 22:05:29

👨‍💻Author: Jack Ge

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




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里面容器被改变了,导致迭代器失效!