C++迭代器失效问题

迭代器失效问题一般是指对于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;就会报错。

猜你喜欢

转载自www.cnblogs.com/FdWzy/p/12563413.html