基于对象中的成员函数从向量中移除对象

时间:2014-08-11 10:17:36

标签: c++ object vector

我无法根据该对象的函数结果创建擦除删除习惯用法从向量中移除对象。

示例,我在这里有一个向量:

std::vector<Entity*> bulletEnemyObjects;

存储Entity类型的对象,每个对象都有一个变量

bool alive;

由对象类

中的函数访问
bool Entity::GetAlive()
{
    return alive;
}

我需要迭代向量,并删除任何返回false的对象到GetAlive()函数。这里可以提供任何帮助吗?

2 个答案:

答案 0 :(得分:1)

erase - remove_if

bulletEnemyObjects.erase(
    std::remove_if(bulletEnemyObjects.begin(), bulletEnemyObjects.end(),
        [](Entity *p) { return !p->GetAlive(); }
        ),
    bulletEnemyObjects.end()
    );

(live example)

答案 1 :(得分:0)

您需要将GetAlive函数设为常量。

bulletEnemyObjects.erase(remove_if(bulletEnemyObjects.begin(), bulletEnemyObjects.end(), [](const Entity* entity){ return ! entity->GetAlive(); }), bulletEnemyObjects.end());

请注意,这不会删除指向的实体对象。您可能需要也可能不需要这样做。它还假设没有空指针。