Sharpless512
Sharpless512

Reputation: 3222

Remove specific object from list (c++)

I want to remove a specific object from my list wielrennerslist but some how is giving errors while compiling.

cout << "Wielrenner" << endl;

list<Wielrenner> wielrennerslist = wielerploegOB.getWielrennersList();
cout << "Welke wielrenner wil je verwijderen?" << endl;

// Alle objecten afprinten in de lijst
for (list<Wielrenner>::iterator it = wielrennerslist.begin(); it != wielrennerslist.end(); it++) {
    Wielrenner wielrennerOB = *it;
    cout << teller << " - " << wielrennerOB.getVoornaam() << " " << wielrennerOB.getAchternaam() << endl;
    teller++;
}
cin >> inputID;

// Naar het object gaan
int N = inputID; /* index of the element you want to retrieve */
if (wielrennerslist.size() > N) {
    list<Wielrenner>::iterator iter = wielrennerslist.begin();
    std::advance(iter, N);

    // 'it' points to the element at index 'N'
    Wielrenner* wielrennerOB2;
    wielrennerOB2 = &*iter;

    wielrennerslist.remove(*wielrennerOB2); // something wrong with this?

    wielerploegOB.setWielrennerList(wielrennerslist);
}//if

Upvotes: 0

Views: 4800

Answers (1)

juanchopanza
juanchopanza

Reputation: 227370

You can use the iterator and std::list::erase to remove the element in question like this:

wielrennerslist.erase(iter);

Otherwise, the remove method should be used like this:

wielrennerslist.remove(*iter);

But this method doesn't do what I think you want to do. It will remove all elements that are equal to the value of the element at position N. But if this is what you want, then you need to have an equality comparison for Wielrenner objects. See std::list::remove.

Upvotes: 2

Related Questions