迭代器失效问题

📅 2026/6/27 3:46:03
迭代器失效问题
什么是“失效”失效就是没有原来的效果了达不到原来的功效了。举生活中的例子充电宝报废接线口短路酒水过期(总之就是达不到原来的效果就是失效)回到迭代器设计迭代器的目的就是为了更加便捷的访问数据而迭代器的本质就是一个封装指针的类如果这个数据对应的迭代器(即地址更改)那么迭代器就失效。也就是运用迭代器实现算法时相同的迭代器再次访问数据时数据‘的位置“改变”即地址改变即迭代器失效。所以迭代器失效指的是指针指向的那块“合法内存空间”被释放、被回收、或者元素被挪走了STL库中迭代器失效的场景当你理解什么是失效后这类场景就很好识别了。vector中插入删除数据会改变迭代器指向的数据(因为插入数据涉及扩容重新分配空间(其实就算不重新分配空间也会导致position位置数据以及之后的数据与其对应的迭代器的对应关系改变整体都向后挪)导致数据的位置改变而删除数据也会导致position位置后的迭代器与其对应的数据的关系都改变(整体都向前挪))。list 中删除数据会改变迭代器指向的数据(而插入数据不会因为list的底层物理地址是不连续的插入的数据自有编译器为它自动分配的地址不会占用其他数据的地址)。