簡體   English   中英

如何使用remove_if從向量中刪除pred返回true的所有元素?

[英]How do I remove all elements for which a pred returns true from a vector using remove_if?

我有一個vector<GameObject*> gameObjects; ,並希望刪除此謂詞確定的所有“死”游戲對象:

bool IsDead (GameObject* g)
{
    return g->dead;
}

其中dead是GameObject的布爾成員變量。

為了實現這一點,我運行以下功能:

void Level::undertake() //remove the dead
{
    remove_if(gameObjects.begin(), gameObjects.end(), IsDead);
}

但是,這不起作用。 為什么不? 最重要的是,我希望能夠完全清除該內存空間,而不僅僅是清除數組中的指針。 我該如何實現?

嘗試

gameObjects.resize(remove_if(gameObjects.begin(), gameObjects.end(), IsDead) - gameObjects.begin());

編輯:1) erase實際上也是可以接受的,如下所示:

std::vector<int>::iterator end = std::remove_if(vi.begin(), vi.end(), f);
vi.erase(end, vi.end());

但調整大小的版本更短。 2)嘗試類似

template <typename T>
struct free_value { void operator()(T* ptr) { delete ptr; } };
std::for_each(end, gameObjects.end(), del<Game>());

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM