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

StackOverflow https://stackoverflow.com/questions/1633651

  •  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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top