【问题标题】:Remove specific object from list (c++)从列表中删除特定对象(c++)
【发布时间】:2012-08-12 12:30:08
【问题描述】:

我想从列表wielrennerslist 中删除一个特定对象,但是编译时出现了一些错误。

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

【问题讨论】:

  • 您遇到什么错误?你能注意在这里正确缩进你的代码吗?每级4个空格就可以了。这使我们更容易阅读。
  • 既然已经有一个迭代器指向要移除的元素,为什么不用列表的erase()函数呢?
  • 我不认为 list::remove 做你认为它在这里做的事情。我认为您真的想使用list::erase,请参阅我的更新答案。

标签: c++ list object element


【解决方案1】:

您可以使用迭代器和std::list::erase 删除有问题的元素,如下所示:

wielrennerslist.erase(iter);

否则,remove方法应该这样使用:

wielrennerslist.remove(*iter);

但是这种方法并没有做我认为你想做的事情。它将删除与位置N 处元素的值相等的所有 元素。但如果这是您想要的,那么您需要对 Wielrenner 对象进行相等比较。见std::list::remove

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-11
    • 1970-01-01
    • 1970-01-01
    • 2017-06-22
    • 2021-08-03
    • 1970-01-01
    相关资源
    最近更新 更多