Vector vec; for (int i = 0 ; i < 20 ; i++) { Sprite * spr = Sprite::create("image/p.png"); spr->setTag(i); vec.pushBack(spr); } for (auto & obj : vec) { Sprite * spr = obj; int key = spr->getTag()%3; if(key == 0) vec.eraseObject(spr); } ``` 如上代码; 当遍历是执行过if条件移除后继续遍历的话会bug 这是这种遍历方法有问题还是Vector不能这样的实时移除 求大神解惑
在vector里遍历移除的时候这样做好像是会有问题,因为你erase了之后,vector里面被移除的spirte后面的所有的sprite会自动往前移一位,这样下个循环的时候auto &obj : vec可能就有问题,我遍历移除的时候一般是这样写的:
for (auto it = vec.begin(); it != vec.end();){
Sprite *spr = obj;
int key = spr->getTag()%3;
if(key == 0){
it = vec.erase(it);
}
else{
it ++;
}
}
我也遇到了同样的问题, 我现在试试用别的遍历方式
这种遍历带移除的,可以考虑倒着遍历