Как использовать remove_if с erase - PullRequest
0 голосов
/ 22 ноября 2011

Я хотел бы знать, как удалить объект из списка на основе условия.

После исследования это то, что я получил, но все равно не работает!

Поэтому я хотел бы знать, как использовать 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*/);
}

1 Ответ

7 голосов
/ 22 ноября 2011

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));

Или использоватьлямбда:

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