迭代器失效
定义
迭代器失效是指在使用迭代器遍历容器(如 vector、list、map 等)的过程中,由于容器内部结构发生了变化,导致原来的迭代器不再有效,不能正确地指向它原本所指向的元素或者不能按照预期的方式进行遍历。
Vector 容器中的迭代器失效
插入操作导致的迭代器失效
当在 vector 中插入元素时,如果插入操作导致了内存重新分配,那么所有指向该 vector 的迭代器都会失效。这是因为 vector 的存储是连续的内存空间,当插入元素使得当前容量不够时,vector 会重新分配一块更大的内存空间,将原来的元素复制或移动到新的空间中,原来的迭代器所指向的内存地址就不再有效。
示例:
#include <iostream>
#include <vector>
int main() {
std::vector<int> v = {1, 2, 3};
auto it = v.begin();
v.push_back(4); // 插入元素可能导致内存重新分配
// 此时 it 可能已经失效,下面的操作可能会导致程序出错
std::cout << *it << std::endl;
return 0;
}


删除操作导致的迭代器失效
在 vector 中删除元素后,被删除元素之后的迭代器都会失效。这是因为删除元素会导致后面的元素向前移动,迭代器原本指向的元素位置发生了改变。



