13.5.6 迭代器失效
可以将迭代器理解为广义的指针,如果对容器的操作影响了元素的存放位置,那么原来的指针指向的区域便不再有意义,这称为迭代器失效。
迭代器失效的情况相对较复杂,需要在实践中不断地进行总结,下面是一些常见的迭代器失效情况。
1.vector
❑插入(push_back)一个元素后,end操作返回的迭代器肯定失效。
❑插入(push_back)一个元素后,capacity返回值与没有插入元素之前相比有改变,则需要重新加载整个容器,此时first和end操作返回的迭代器都会失效。
❑进行删除操作(erase,pop_back)后,指向删除点的迭代器全部失效;指向删除点后面的元素的迭代器也将全部失效。
2.deque
❑在deque容器首部或者尾部插入元素不会使得任何迭代器失效。
❑在其首部或尾部删除元素则只会使指向被删除元素的迭代器失效。
❑在deque容器的任何位置插入和删除操作将会使指向该容器元素的所有迭代器失效。
3.List/set/map/multiset/multimap
删除元素时,指向该删除节点的迭代器失效。