

这是一个经典错误,呵呵。在循环的时候不要去删除容器里的元素。
在传统的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()
{
if ((*iter) == object)
{
iter = _data.erase(iter);
object->release();
}
else
{
++iter;
}
}
}
…
我试了 怎么不可以
对的,只要返回迭代器指针就行了,不用再循环一遍
vec.clear()不就行了。。不知道lz想干嘛