• 欢迎浏览“String me = Creater\忠实的资深Linux玩家;”,请文明浏览,理性发言,有侵犯你的权益请邮件我(creater@vip.qq.com).
  • 把任何的失败都当作一次尝试,不要自卑;把所有的成功都想成是一种幸运,不要自傲。
  •    5年前 (2013-06-03)  C++ |   2 条评论  23 
    文章评分 0 次,平均分 0.0

    有时候我们在遍历stl的容器的时候需要删除一些不符合条件的item,这时候我们就要担心iterator是不是因为原始的数据的改变而发生改变,因此往往比较容易出现一些问题,

    下面比较一下list 和 vector的两种一边遍历一边删除:

    // list
        list<int> lll;
        // vector
        // vector<int> lll;
        lll.push_back(1);
        lll.push_back(2);
        auto tb = lll.begin(), te= lll.end();
        for(;tb!=te;){
            printf("%p", &*tb);
            printf("%p", &*(lll.end()));
            tb=lll.erase(tb);
        }
    

    list的能正常通过运行但是vector的却有断错误,问题出在哪里呢? 问题就是在于两个的erase函数的不同.list erase不会改不原来的iterator, vector 就会改变,因此我们只要在代码里稍微做一点点修改就可以改正这个问题:

    for(;tb!=te;)
    // 改成
    for(;tb!=lll.end();),
    
     

    除特别注明外,本站所有文章均为String me = "Creater\忠实的资深Linux玩家";原创,转载请注明出处来自http://unix8.net/home.php/1356.html

    关于

    发表评论

    暂无评论

    切换注册

    登录

    忘记密码 ?

    切换登录

    注册

    扫一扫二维码分享