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之前如果有保存迭代器,可能会访问到已经析构的空间