2009-10-27 52 views
2

我有一個指向對象的指針向量。我想根據由成員函數報告的屬性從此向量中移除對象。分區指針向量時的謂詞語法(C++)

我想跟隨一個很好的例子,我發現如何從向量中刪除某些指針(及其關聯的對象)。其基本思想是對矢量進行分區,刪除所選對象,然後刪除指向這些對象的指針。下面是例子(從Dr. 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 *> liveStrains。謂詞應該是應變成員函數isExtinct()。以下不起作用:

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

我可以看到,我試圖調用一個指向對象的指針而不是對象本身的成員函數。爲了解決這個問題,嘗試將&更改爲*(我明顯是一個新手),並且我嘗試爲類Simulation創建一個成員函數,用於在成員函數中更新liveStrains。我不確定這是值得進入沒有工作的細節。我被可用的語法選項所困擾,或者如果我想要做的甚至是允許的。

在此先感謝您的幫助。

回答

1

解決的辦法是使用std::mem_fun,它用於指向對象的指針,而不是std :: mem_fun_ref。