码迷,mamicode.com
首页 > 编程语言 > 详细

C++迭代器失效问题

时间:2020-03-25 00:58:50      阅读:71      评论:0      收藏:0      [点我收藏+]

标签:main   tor   失效   解决方法   利用   就会   解决   例子   else   

迭代器失效问题一般是指对于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++迭代器失效问题

标签:main   tor   失效   解决方法   利用   就会   解决   例子   else   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!