[英]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.