cocos2dx 3.0 rc0 Vector删除元素出错

Vector < Node* > vec;
for (int i = 0; i < 4; ++i)
{
auto n = Node::create();
n->setTag(i);
vec.pushBack(n);
}
for(auto n : vec)
{
if (n->getTag() % 2 == 0)
{
vec.eraseObject(n);
}
}

这是一个经典错误,呵呵。在循环的时候不要去删除容器里的元素。

在传统的for循环时,只是会出错,不会崩溃。

但在这种新式的循环里,现在会导致程序崩溃了。

那要怎么做才能实现这种效果

Vector < Node* > vec;

for (int i = 0; i < 4; ++i)

{

auto n = Node::create();

n->setTag(i);

vec.pushBack(n);

}

Vector<Node*> toErase;

for(auto n : vec)

{

if (n->getTag() % 2 == 0)

{

toErase.pushBack(n);

}

}

for (auto n : toErase)

{

vec.eraseObject(n);

}

for 循环里尽量不要去删除东西,即使删除的话要谨慎操作

其实不用这么麻烦,在ccvector.h官方函数定义中,我们可以看出,for内部删除只需要返回下迭代器指针。
void eraseObject(T object, bool removeAll = false)
{
CCASSERT(object != nullptr, “The object should not be nullptr”);

if (removeAll)
{
for (auto iter = _data.begin(); iter != _data.end():wink:
{
if ((*iter) == object)
{
iter = _data.erase(iter);
object->release();
}
else
{
++iter;
}
}
}

我试了 怎么不可以

http://www.cnblogs.com/xkfz007/archive/2012/08/17/2644061.html
终于可以了

对的,只要返回迭代器指针就行了,不用再循环一遍

vec.clear()不就行了。。不知道lz想干嘛