迭代器失效:迭代器就是把指针的一些操作进行重载,所以迭代器失效可以认为指针的失效,也即是野指针。
vector是一个序列式容器,内存是连续存储的。所以如果erase一个元素,会使得后续元素向前搬移,使得迭代器失效。不够erase函数会返回被删除元素的下一个元素的迭代器。
除此之外insert一个元素,也可能失效。insert分两种情况:(1)如果vector存储空间还有,也就是够一个元素插入,不需要重新分配内存,那么迭代器不会失效。(2)如果插入一个元素导致vector重新申请空间、搬移元素、释放新空间,就会导致迭代器失效。
从上可以看出两种操作会导致迭代器失效:(1)删除操作(2)插入操作(引起扩容的操作)
解决方法:更新迭代器