vector中迭代器失效

什么是迭代器失效

迭代器是将指针的方法封装形成的一种新的类型,和指针的特点类似,当指针指向一段不存在的空间时,该指针就是所谓的野指针,再使用迭代器就相当于在操作一个野指针会导致程序崩溃

vector迭代器失效的情况

  1. 所有的插入操作有可能会导致迭代器失效,如push_back,insert,因为插入元素可能会需要扩容,扩容的过程要释放旧空间使用新空间,如果没有给迭代器重新赋值,那迭代器还指向已经被释放掉的旧空间,就会导致迭代器失效。
  2. 删除操作earse,vector中erase方法的参数是一个迭代器类型的pos表示位置。删除掉当前位置的元素时候,后面的元素会向前系统填补删除的位置,迭代器还是指向一个有效的位置,但是如果删除的恰好是最后一个元素,后面没有元素可以再往前补充了,那迭代器指向的位置就失效了,再对这个迭代器进行解引用等操作就会崩溃,所以编译器认为删除当前位置不更新迭代器的值也会导致失效。
  3. 交换操作,交换操作后迭代器指向的是原来的空间,再用迭代器对交换后的空间进行遍历会引发崩溃。

解决

解决的话就是有如上操作的话,在需要使用迭代器之前,对迭代器进行重新赋值。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值