vector erase 迭代器失效

就拿for遍历来说,如果在遍历的过程中删除一个元素的话

vec.end() 会被减一 vec.end() - 1

std::vector<int> vec = {1,2,3,4,5};
auto iter = vec.begin();
auto end = vec.end();
for(; iter != end; ++iter) {
    if (*iter == 3)
        erase(iter);
}

vec的size已经是4了,但是这样还是会访问到第五个,虽然内存是分配给vec了

[1,2,4,5,未使用]

原来的vec[2] vec[3] vec[4] 的值分别设成了vec[3] vec[4] ?

失效的表现

1、有的指针指向的值发生了偏移

2、earse之前如果有保存迭代器,可能会访问到已经析构的空间

posted @ 2020-10-26 22:13  攻城狮小Liu  阅读(277)  评论(0编辑  收藏  举报