Я хотел бы знать, возможно ли представить это выражение, используя remove_if и лямбда-выражение.
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; } }
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 чрезвычайно узки.
std::list
std::vector
Лучше использовать smart pointers с lambda,
smart pointers
lambda
Пытаться:
std::list<std::shared_ptr<gh::Actor>> actors; actors.remove_if([](std::shared_ptr<Actor>& a){ return a->state == DELETE_STATE; });