错误:容器遍历时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已经发生变化了,其它的都不是问题. 

你可能感兴趣的:(错误:容器遍历时eraser导致iterator无效)