【发布时间】:2020-02-01 19:22:05
【问题描述】:
我有一个std::vector,我想从满足isDestroyed() 条件的向量中删除指针,但还要对指针调用delete。
我做了以下操作,但它需要在向量上循环两次。有没有更有效的方法?
std::vector<GameObject*> gameObjects;
std::vector<GameObject*> destroyedObjects;
// Get objects to be deleted
std::copy_if (gameObjects.begin(), gameObjects.end(), std::back_inserter(destroyedObjects), [](GameObject* b){return b->isDestroyed();} );
// Remove objects from vector
gameObjects.erase(
std::remove_if(
gameObjects.begin(),
gameObjects.end(),
[](GameObject* p) { return p->isDestroyed(); }
),
gameObjects.end()
);
// Delete the objects
for (GameObject* o : destroyedObjects)
delete o;
【问题讨论】:
-
向相反方向循环,这样您就可以在不移动其他迭代器的情况下删除一个元素。