迭代器失效的问题


迭代器失效的问题,与容器的底层的数据结构有关。
当遍历迭代器的时候,每一次都会判断当前迭代器是否已经到达末尾的迭代器

  • 不同容器的迭代器是不能进行比较的
  • 容器的元素进行增加、删除操作后,原来的迭代器就全部失效了就会报迭代器失效

vector

(底层时一个可动态扩容的数组,数据的增加与删除都会影响到其他的数据的位置,所以当进行数据增删的时候,其他数据的迭代器有可能会失效)

  1. 当插入(push_back)一个元素后,end操作返回的迭代器肯定失效。

  2. 当插入(push_back)一个元素后,capacity返回值与没有插入元素之前相比有改变,则需要重新加载整个容器,此时begin和end操作返回的迭代器都会失效。

  3. 当进行删除操作(erase,pop_back)后,指向删除点的迭代器全部失效;指向删除点后面的元素的迭代器也将全部失效。

deque

(底层时一个可动态扩容的数组,数据的增加与删除都会影响到其他的数据的位置,所以当进行数据增删的时候,其他数据的迭代器有可能会失效)

  1. 在deque容器首部或者尾部插入元素不会使得任何迭代器失效。

  2. 在其首部或尾部删除元素则只会使指向被删除元素的迭代器失效。

  3. 在deque容器的任何其他位置的插入和删除操作将使指向该容器元素的所有迭代器失效。

list

  1. 删除一个元素的时候,只有当前的迭代器失效,其前后的迭代器不会失效
  2. 添加一个元素的时候,迭代器不会失效
    (内存不是连续的,所以节点的增删不会影响到其他节点的存储,所以在进行数据的增删的时候,其他节点的迭代器不会失效)

关联容器set map unordered_set unordered_map

关联容器删除一个元素的时候,当前的迭代器会失效,其他的迭代器不会失效,增加一个元素的时候,迭代器不会失效
关联容器底层的数据结构
有序关联容器->>红黑树(每个数据一个节点,所以其他数据的删除不影响当前节点的内存的位置)
无序关联容器->>哈希表(链式哈希表,每个数据存储占据一个节点,所以增删操作,数据之间相互不影响)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值