Синтаксис предиката при разбиении вектора указателей (C++)

У меня есть вектор указателей на объекты. Я хотел бы удалить объекты из этого вектора в соответствии с атрибутом, о котором сообщает функция-член.

Я пытаюсь следовать хорошему примеру, который я нашел о том, как удалить определенные указатели (и связанные с ними объекты) из вектора. Основная идея состоит в том, чтобы разделить вектор, удалить выбранные объекты, а затем удалить указатели на эти объекты. Ниже приведен пример (от доктор Доббс):

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 в функции-члене. Я не уверен, что стоит вдаваться в подробности того, что не сработало. Я сильно сбит с толку доступными синтаксическими опциями, или даже разрешено ли то, что я пытаюсь сделать.

Заранее благодарю за любую помощь.


person Sarah    schedule 27.10.2009    source источник


Ответы (1)


Решение состоит в использовании std::mem_fun, созданного для указателей. объектам, а не std::mem_fun_ref.

person Sarah    schedule 28.10.2009