2017-05-24 3 views
0

Ich habe Klasse Human mit 2 Eigenschaften erstellt: Name und Alter, und ich möchte alle Elemente in den geschachtelten Vektoren des Typs Mensch, die Alter haben == 20, hier ist meine ImplementierungLöschen von Elementen mit remove_if in einem geschachtelten Vektor

class Human 
{ 
public: 
    string name; 
    int age; 
    Human(string name,int age):name(name),age(age){}  
    bool isAge20(const Human human) {return human.age == 20;} 

    static void removeElement(vector <vector <Human> > vvi) 
    { 
     vector< vector<Human> >::iterator row; 
     vector<Human>::iterator col; 
     for (row = vvi.begin(); row != vvi.end(); row++) { 
     row->erase(std::remove_if(row->begin(), row->end(), isAge20), row->end()); 
    } 
}; 

Merkwürdig, wenn ich eine solche verschachtelte Vektor und rufen sie die removeElement Funktion damit, erhalte ich folgende Fehlermeldung: muss ‚verwenden. 'oder' -> 'Zeigerfunktion in .. aufrufen. Was kann die Ursache sein?

+0

[OT]: Wenn Sie 'vvi' nach Wert übergeben, ändern Sie nur den Vektor lokal. – Jarod42

+1

'isAge20' sollte' statisch' sein. – Jarod42

+0

@ Jarod42 Danke, das hat wirklich funktioniert, jede Erklärung warum:? –

Antwort

0

Das Prädikat sollte aufrufbar sein (Funktion/Funktor), isAge20 ist eine Memberfunktion. Sie können etwas wie:

static void removeElement(vector<vector<Human>>& vvi) 
{ 
    for (auto& row : vvi) { 
     row.erase(std::remove_if(row.begin(), row.end(), 
           [](const Human& human) { return human.age == 20; }), 
        row.end()); 
    } 
} 
Verwandte Themen