Wie entferne ich remove_if?

  • Ich würde gerne wissen, wie man ein Objekt aus einer Listenbasis unter einer Bedingung entfernt.

    Nach Recherchen habe ich dies aber bekommen es funktioniert immer noch nicht!

    Ich würde gerne wissen, wie remove_if mit Löschen verwendet wird.

     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*/);
    }
     
    22 November 2011
    Mateen UlhaqOskar Walker
1 answer
  • std::list hat eine Memberfunktion remove_if:

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

    Für Ihr Prädikat könnten Sie entweder einen Funktor schreiben:

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

    Oder verwenden Sie einen Lambda:

     listA.remove_if([](const A& a) { return (a.x == 123); });
     
    22 November 2011
    Bleep Bloop