如何使用remove_if擦除

问题描述:

我想知道如何根据条件从列表中删除对象。如何使用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*/); 
} 

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