我看到它被引用了很多,但它到底是什么没有明确的答案。我的经验是使用高级语言,所以我不熟悉集合框架中存在的无效性。
什么是迭代器失效?
为什么会出现?为什么难对付?
最佳答案
迭代器是美化的指针。迭代器失效很像指针失效。这意味着它突然指向垃圾数据。
因为这样做很自然,但却是错误的:
for(iterator it = map.begin(); it != map.end(); ++it) { map.erase(it->first); // whoops, now map has been restructured and iterator // still thinks itself is healthy }
因为那个错误就在那里?没有编译器错误,没有警告,你输了。你只需要接受足够好的训练来观察它们并防止它们。如果你不知道自己在做什么,那就是非常隐蔽的错误。 C++ 的设计理念之一是速度胜过安全。在 C++ 语言设计者看来,将导致迭代器失效而不是未指定行为的运行时检查成本太高。
当您迭代数据结构和修改结构本身时,您应该保持高度警惕,而不仅仅是其中包含的对象。那时你可能应该跑到文档并检查操作是否非法。
关于c++ - 什么是迭代器失效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16904454/