迭代器失效 × 容量边界实验室

先预测,再执行结构修改。红叉表示旧句柄已被判定失效;实验室永远不会解引用、比较或递增它。

已构造对象 备用存储 失效位置
4
6
2
it@2

可执行
预测:旧 it@2 会怎样?

memory / node map

vector.insert(2)

操作前 · old handles

操作后 · new state

先完成预测,再揭晓失效规则。

不用旧句柄,如何修复?

结构修改前保存逻辑位置,或直接接住修改操作返回的新位置。

1 · 丢弃old_it // 不再使用
2 · 取得位置保存 index 或接住返回值
3 · 重新定位it = container.begin() + index