C++迭代器失效问题

泄露秘密 提交于 2020-03-25 02:37:50

迭代器失效问题一般是指对于stl容器来说,调用erase某迭代器之后,就不能再使用这个iterator了。

 

解决方法:

(1):erase(iter++);这样可以继续使用该iter

(2):it=erase(iter);这是利用erase函数的返回值,一般的erase函数都会返回一个删除迭代器的后继迭代器。

如果是erase(iter);iter++;这样不能继续使用iter,它已经失效了。

例子:

int main()
{
    set<int> p={1,2,3};
    for(auto it=p.begin();it!=p.end();){
        if(*it==2){
            p.erase(it++);
        }
        else{
            it++;
        }
    }
    for(auto it=p.begin();it!=p.end();++it){
        cout<<*it<<endl;
    }
    return 0;
}

如果把p.erase(it++);改成p.erase(it);++it;就会报错。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!