2011-11-21 99 views
0

我想知道如何根據條件從列表中刪除對象。如何使用remove_if擦除

經過研究,這是我得到的,但它仍然行不通!

所以我想知道如何使用remove_if擦除。

Class A 
{ 
public: 
    A(int x,int y); 
    int x; 
    int y; 
}; 


int main() 
{ 
    list<A> listA; 

    A lista1(123,32); 
    listA.push_back(lista1); 
    A lista2(3123,1233); 
    listA.push_back(lista2); 
    A lista3(123,4123); 
    listA.push_back(lista3); 

    //HERE HOW TO REMOVE LIST if x = 123? 
    listA.erase(remove_if(listA.begin(),listA.end(),/*REMOVE CRITERIA*/); 
} 

回答

7

std::list具有remove_if成員函數:

http://www.cplusplus.com/reference/stl/list/remove_if/

爲了您的謂詞,你既可以寫一個函子:

struct RemoveIfX 
{ 
    RemoveIfX(int x) : m_x(x) {} 

    bool operator() (const A& a) 
    { 
     return (a.x == m_x); 
    } 

    int m_x; 
}; 

listA.remove_if(RemoveIfX(123)); 

或者使用lambda:

listA.remove_if([](const A& a) { return (a.x == 123); }); 
+0

你好,謝謝你的回覆!所以你說我應該超載我的A類操作符()? – mister

+1

不,RemoveIfX是一個獨立的幫助器類。蘭姆達斯現在通常更受歡迎,因爲它們更簡潔。如果您使用的編譯器不支持它們,我給出了兩個選項。 –

+0

我想知道更多關於lambda方法的信息(我嘗試過,但只用g ++ 4.4.1得到了編譯錯誤)。 – Walter