错误:容器遍历时eraser导致iterator无效

批注:删除方法1还是有问题,应该先把要删除的元素暂时保存,后一条一条删。
by debehe 2008.01.22

这个错误又再次犯了,不能不记: )

因为容器的每个元素是个结构体,结构体中的元素又是在堆上创建上,所以删除一个元素时,需要先释放结构体中分配的内存.故而:
在一个for循环中用iterator遍历容器时,一边遍历一边eraser(iterator),好像没问题,其实确有一个大大的错误.

产生错误的原因:
因为在执行了eraser(iterator)之后,会返回一个iterator,就是被删除的元素的下一个,而for循环用到的iterator已经发生了变化,但我却又继续++iterator,这里的++已经不再是我想象的那样"下标索引加1"!!于是错误产生了.

正确的遍历删除元素方法:
1.可以用reverse_iterator和rbegin,rend,来从后面往前面删除,
2.先不erasor,最后clearall,或者...总之记住iterator已经发生变化了,其它的都不是问题. 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值