思前想后还是先多巩固基础在去学习新的技术为好,近期会整理一些对基础知识的总结
迭代器失效是因为向容器插入或者删除元素导致容器的空间变化或者说是次序发生了变化,使得原迭代器变得不可用。因此在对stl迭代器进行增删操作时,要格外注意迭代器是否失效。
下面介绍几种常用的迭代器失效情况:
list/map/set
插入时迭代器不会失效
当删除时,有且仅有被删除节点的迭代器才失效
deque
首尾插入元素不会导致迭代器失效
首部和尾部删除元素时会导致被删除元素的迭代器失效;若是在除首尾部外的任意位置进行删除操作,迭代器全部失效
vector
因为vector和queue这种容器属于序列式容器,使用了连续分配的内存,因为插入和删除操作很容易引起迭代器失效的情况。
插入时,当vector的容量(这里不是size(),size()返回的是容器的大小,capacity()返回的是容器当前能够容纳的元素数量)不变时,只失效之后(iterator->end)的迭代器,否则全部失效。
删除时,被删除节点之后的迭代器全部失效。
后续会整理stl底层数据结构以及几种常见容器增删操作后的内存情况