c++迭代器失效问题探究

本文探讨了C++中迭代器失效的情况,特别是在处理vector、string和deque时,由于添加和删除操作可能导致内存空间的重新分配。《C++ Primer》中指出,当向vector或string添加元素并引起内存重分配时,所有迭代器、指针和引用都将失效。而在deque中,插入操作会影响不同位置的迭代器。删除元素后,不同容器的迭代器有效性也有所不同。解决迭代器失效问题的关键在于操作后正确地重新定位迭代器,并避免保存end()返回的迭代器。
摘要由CSDN通过智能技术生成

迭代器失效:该迭代器不再表示任何元素,即该迭代器已经不表示任何元素。
何时发生:处理vector,string,deque时,如果进行添加和删除操作就会导致迭代器失效,因为可能回引起内存空间的重新分配。
《C++ Primer》中总结如下:
(1)添加元素后:

  • 容器是vector或string时,如果存储空间重新分配,之前指向容器的迭代器、指针和引用都会失效;如果没有重新分配,插入位置之前的迭代器、指针和引用都有效,插入位置之后的失效
  • 容器是deque,插入到除首尾位置之外的任何位置都会导致迭代器、指针和引用失效;在首尾添加,则迭代器失效,指向存在的元素的指针和引用不会失效
    注意:关于添加元素,由于 vector和string是采用的连续的内存段存储,如果添加元素没有重新分配空间(添加以后capacity没有改变),就会导致添加位置以后的元素的位置都要后移,这样就会导致迭代器失效,同时指针和引用也失效;而如果添加以后capacity发生改变,即重新分配内存空间,则所有的迭代器,指针和引用都会失效
    对于deque,根据stl源码中的剖析,插入在中间位置时,程序会去比较插入位置之前的元素个数和位置之后的元素个数,如果插入之前的较少,则把插入位置之前的元素进行前移,反之,则后移,这样的话就会导致迭代器失效(如果是这样的话,迭代器的失效问题是不是要根据插入位置来判断?如果是进行前移,位置之后的迭
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值