如何边遍历边删除stl vector/list里的元素

2013年6月3日 由 Creater 留言 »

有时候我们在遍历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();),
广告位

发表评论

你必须 登陆 方可发表评论.