2

我有一个指向对象的指针向量。我想根据成员函数报告的属性从此向量中删除对象。

我正在尝试遵循一个很好的例子,我发现如何从向量中删除某些指针(及其关联对象)。基本思想是对向量进行分区,删除选定的对象,然后删除指向这些对象的指针。以下是示例(来自Dobbs 博士):

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。谓词应该是应变成员函数isExtinct()。以下不起作用:

 vector< Strain * >::iterator last = partition( liveStrains.begin(), liveStrains.end(), not1(std::mem_fun_ref(&Strain::isExtinct)) );

我可以看到我试图在指向对象而不是对象本身的指针上调用成员函数。为了解决这个问题,尝试将 & 更改为 *(我显然是一个新手),并且我尝试为类 Simulation 创建一个成员函数,该函数在成员函数中更新 liveStrains。我不确定是否值得深入了解不起作用的细节。我对可用的语法选项感到非常困惑,或者我试图做的事情是否被允许。

提前感谢您的帮助。

4

1 回答 1

1

解决方案是使用std::mem_fun,它用于指向对象的指针,而不是 std::mem_fun_ref。

于 2009-10-28T15:49:39.210 回答