"Boltar" <> wrote:
>
> for(iter=objlist.begin();iter != objlist.end()
> {
> iter2 = iter
> iter2++;
> obj = *iter;
> obj->run();
> if (obj->destroy_me)
> {
> objlist.erase(iter);
> delete obj;
> iter = iter2;
> }
> else iter++;
> }
Something that should have been a member function of std::list:
template < typeanme T >
void remove_if( std::list<T>& li, Fn fn )
{
typename std::list<T>::iterator it = li.begin();
while ( it != li.end() )
if ( fn( *it ) )
li.erase( it++ );
}
Then you can:
bool should_destroy( MyClass* obj ) {
if ( obj->destroy_me ) {
delete obj;
return true;
}
return false;
}
for_each( objlist.begin(), objlist.end(), mem_fun( &MyClass::run ) );
remove_if( objlist, &should_destroy );
Or you can:
bool run_and_check_destroy( MyClass* obj ) {
obj->run();
if ( obj->destroy_me ) {
delete obj;
return true;
}
return false;
}
remove_if( objlist, &run_and_check_destroy );