一.迭代器失效原因
在STL中vector容器会存在迭代器失效,原因无非以下两种:
- 1.使用容器内函数可能会进行扩容,从而开辟新空间,销毁旧空间,可能会导致迭代器指向非法空间,导致失效。
Resize()/reserve()/insert()/assign()/push_back()等方法可能会扩容。 - 2.清空空间导致迭代器失效
clear()/resize(0) - 3.使用erase()进行循环同样会导致迭代器失效。
二.解决方法
每次扩容/删除后,重新给迭代器赋值即可。
erase()函数进行循环删除,使用:
it= v1.erase(it);
三.引用失效
引用失效与迭代器失效原因与解决方法相同。