本篇是对于vector的那篇章的补充。
前面我们讲过,迭代器底层实际上就是一个指针,例如vector的迭代器就是一个原生态指针
当迭代器底层的指针指向的空间被销毁时,如果继续在程序中使用该迭代器,就会造成程序崩溃,这就是迭代器失效。
对于vector,会导致迭代器失效的操作有:
可能造成空间改变的操作,如resize、reserve、insert、assign、push_back等
以上函数在使用时都可能会导致vector扩容,在扩容时原空间会被释放,迭代器就会指向一块被释放的空间
删除操作
假设有迭代器pos,使用pos删除pos对应位置的元素后,该迭代器对应的元素发生改变,属于迭代器失效
如果pos刚好对应最后一个元素,删除后迭代器pos就超出了有效元素范围,可能导致非法访问,属于迭代器失效
迭代器失效后,如果我们需要继续使用迭代器,给迭代器重新赋值即可