什么是迭代器失效
迭代器是将指针的方法封装形成的一种新的类型,和指针的特点类似,当指针指向一段不存在的空间时,该指针就是所谓的野指针,再使用迭代器就相当于在操作一个野指针会导致程序崩溃
vector迭代器失效的情况
- 所有的插入操作有可能会导致迭代器失效,如push_back,insert,因为插入元素可能会需要扩容,扩容的过程要释放旧空间使用新空间,如果没有给迭代器重新赋值,那迭代器还指向已经被释放掉的旧空间,就会导致迭代器失效。
- 删除操作earse,vector中erase方法的参数是一个迭代器类型的pos表示位置。删除掉当前位置的元素时候,后面的元素会向前系统填补删除的位置,迭代器还是指向一个有效的位置,但是如果删除的恰好是最后一个元素,后面没有元素可以再往前补充了,那迭代器指向的位置就失效了,再对这个迭代器进行解引用等操作就会崩溃,所以编译器认为删除当前位置不更新迭代器的值也会导致失效。
- 交换操作,交换操作后迭代器指向的是原来的空间,再用迭代器对交换后的空间进行遍历会引发崩溃。
解决
解决的话就是有如上操作的话,在需要使用迭代器之前,对迭代器进行重新赋值。