Синтаксис предиката при разбиении вектора указателей (C ++)
-
06-07-2019 - |
Вопрос
У меня есть вектор указателей на объекты. Я хотел бы удалить объекты из этого вектора в соответствии с атрибутом, сообщаемым функцией-членом.
Я пытаюсь следовать хорошему примеру, который нашел, как удалять определенные указатели (и связанные с ними объекты) из вектора. Основная идея - разделить вектор, удалить выбранные объекты, а затем удалить указатели на эти объекты. Ниже приведен пример (из доктора Доббса ):
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, а мой вектор - вектор & Lt; Напряжение * & GT; liveStrains. Предикатом должна быть функция-член Strain isExtinct (). Следующее не работает:
vector< Strain * >::iterator last = partition( liveStrains.begin(), liveStrains.end(), not1(std::mem_fun_ref(&Strain::isExtinct)) );
Я вижу, что я пытаюсь вызвать функцию-член по указателю на объект, а не на сам объект. Чтобы обойти это, попытался изменить & Amp; в * (я, очевидно, новичок), и я попытался создать функцию-член для класса Simulation, которая выполняет обновление liveStrains в функции-члене. Я не уверен, что стоит вдаваться в детали того, что не сработало. Я сильно смущен доступными синтаксическими опциями, или если то, что я пытаюсь сделать, даже разрешено.
Заранее спасибо за любую помощь.
Решение
Решением является использование std :: mem_fun , который сделано для указателей на объекты, а не на std :: mem_fun_ref.