我想知道是否可以使用remove_if和lambda表达式来表示这个表达式。
std::list< gh::Actor* >::iterator astit = actors.begin();
while (astit != actors.end())
{
if( (*astit)->state == DELETE_STATE )
{
Actor* reference = *astit;
actors.erase(astit++);
delete reference;
}
else
{
++astit;
}
}
答案 0 :(得分:2)
最好smart pointers
使用lambda
。
尝试:
std::list<std::shared_ptr<gh::Actor>> actors;
actors.remove_if([](std::shared_ptr<Actor>& a){ return a->state == DELETE_STATE; });
答案 1 :(得分:2)
actors.erase(
std::remove_if( actors.begin(), actors.end(), []( gh::Actor*a )->bool {
if (!a || a->state == DELETE_STATE) {
delete a;
return true;
} else {
return false;
}
}),
actors.end()
);
顺便说一句,你几乎肯定不想使用std::list
。使用std::vector
- std::list
优于std::vector
的情况非常狭窄。