首页 > 编程语言 > 详细

C++迭代器失效问题

时间:2020-03-25 09:13:53      阅读:62      评论:0      收藏:0      [点我收藏+]

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

C++迭代器失效问题

原文:https://www.cnblogs.com/FdWzy/p/12563413.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!