vector迭代器失效

迭代器是STL中访问容器元素的重要工具,它在内存管理时可能会失效,比如在resize、reserve、insert和push_back等操作后。迭代器失效可能导致程序崩溃,尤其是在不同编译器环境下表现不一。解决办法是在可能导致迭代器失效的操作后,及时更新迭代器。理解迭代器的工作原理和避免失效是确保代码稳定的关键。
摘要由CSDN通过智能技术生成

        vector迭代器主要作用是让算法能不用关心底层数据结构。器底层实际是一个指针或者是对指针进行封装,vector迭代器就是一个指针。

        迭代器失效就是迭代器底层对应指针所指向的空间被销毁了,导致使用了一块已经被释放了的空间。造成的后果就是程序奔溃,不使用并非会导致程序奔溃。

        一般都是扩容发生深拷贝时,开辟新空间,旧空间被释放了,但是迭代器没有进行更新,还指向原来的旧空间。

  • 会导致底层空间改变的操作,都可能导致迭代器失效。简单来说,会导致扩容发生深拷贝。如resize,reserve,insert,push_back函数等等。

 

 

 解决办法:知道扩容后重新更新迭代器。

 

  •  迭代器指定位置插入或删除,vs编译器下会导致程序奔溃,但是在gcc编译器下不会报错,但是可能得不到预期结果。

 

 

解决办法:也是再删除后面重新更新迭代器。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值