STL迭代器失效问题

STL容器分为序列式容器和关联式容器:

  • 序列式容器:

    • vector、list、deque等

  • 关联式容器:

    • set、map、unordered_map、unordered_map等

对于序列式容器(list除外),对某节点操作时,会使对应节点及其后续迭代器失效

  1. vector

    1. push_back():在元素末尾添加元素,当还有空间时,只会使尾迭代器失效。当空间已满,会将原数组拷贝到扩容后的新数组,使原迭代器全部失效。

    2. pop_back():尾删除,会使尾迭代器失效。

    3. insert():当有剩余空间时,会使插入点及以后的迭代器失效,无剩余空间时,所有迭代器全部失效

    4. erase():删除点及其以后的迭代器全部失效

  2. deque

    1. push_back():使尾迭代器失效

    2. push_front():使头迭代器失效

    3. pop_back():使尾迭代器失效

    4. pop_front():使头迭代器失效

    5. insert()和erase():判断插入或删除点前后的元素数量,如果前方元素数量较少,则将前方所有元素向前移动,使插入点及其以前的迭代器全部失效。如果后方元素数量较少,则将后方所有元素向后移动,使插入点及其以后的迭代器全部失效。

  3. list

    1. 由于list是用指针连接各个节点的,所以对节点进行操作时,只会使当前的迭代器失效,不会影响其他迭代器。

  4. 关联式容器

    1. 同list,只会影响当前节点的迭代器,不会对其他迭代器产生影响。

erase()函数使用后迭代器的变化

  • 序列式容器

    • 使用后返回下一个迭代器,则使用时应该 ite=vec.erase(ite);

  • 关联式容器

    • 使用后不返回下一个迭代器,需要ite++ ,s.erase(ite++);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值