从列表中删除特定的对象(C++)
问题描述:
我想从我的列表中删除特定的对象wielrennerslist
但是一些如何在编译时给出错误。从列表中删除特定的对象(C++)
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
答
可以使用迭代器和std::list::erase要删除的元素在问题是这样的:
wielrennerslist.erase(iter);
否则,remove方法应该用这样的:
wielrennerslist.remove(*iter);
但这方法不会做我认为你想做的事。它会删除所有元素,它们与位置N
上元素的值相等。但是,如果这是你想要的,那么你需要对Wielrenner
对象进行平等比较。见std::list::remove。
你得到的错误是什么?你能否注意在这里正确地缩进你的代码?每个级别4个空格将会有所斩获。这使我们更容易阅读。 – Bart 2012-08-12 12:34:31
既然你已经有一个迭代器指向要删除的元素,为什么不使用列表的[erase()](http://www.cplusplus.com/reference/stl/list/erase/)函数呢? – 2012-08-12 12:43:16
我不认为'list :: remove'会做你认为它在这里做的事情。我想你真的想用'list :: erase',看我更新的答案。 – juanchopanza 2012-08-12 13:15:38