批注:删除方法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已经发生变化了,其它的都不是问题.
本文详细解析了在使用迭代器遍历容器并删除元素时常见的错误操作,并提供了两种有效的解决方案:一是利用逆向迭代器从后向前删除;二是遍历过程中标记待删元素,最后统一清除。
1685

被折叠的 条评论
为什么被折叠?



