У меня есть вектор указателей на объекты. Я хотел бы удалить объекты из этого вектора в соответствии с атрибутом, о котором сообщает функция-член.
Я пытаюсь следовать хорошему примеру, который я нашел о том, как удалить определенные указатели (и связанные с ними объекты) из вектора. Основная идея состоит в том, чтобы разделить вектор, удалить выбранные объекты, а затем удалить указатели на эти объекты. Ниже приведен пример (от доктор Доббс):
vector<Object *> v ;
v.push_back( new Object( ... ) ) ;
...
vector<Object *>::iterator last =
partition( v.begin(), v.end(), not1(predicate()) ) ;
for( vector<Object *>::iterator i = last ; i != v.end() ; ++i )
{
delete *i ;
}
v.erase( last, v.end() ) ;
Я запутался в правильном синтаксисе предиката. Мои объекты относятся к классу Strain, а мой вектор — vector‹ Strain * > liveStrains. Предикатом должна быть функция-член Strain isExtinct(). Не работает следующее:
vector< Strain * >::iterator last = partition( liveStrains.begin(), liveStrains.end(), not1(std::mem_fun_ref(&Strain::isExtinct)) );
Я вижу, что пытаюсь вызвать функцию-член для указателя на объект, а не для самого объекта. Чтобы обойти это, попытался изменить & на * (я, очевидно, новичок), и я попытался создать функцию-член для класса Simulation, которая выполняет обновление liveStrains в функции-члене. Я не уверен, что стоит вдаваться в подробности того, что не сработало. Я сильно сбит с толку доступными синтаксическими опциями, или даже разрешено ли то, что я пытаюсь сделать.
Заранее благодарю за любую помощь.