假设我有以下类(class)
class Human
{
public:
Human();
Human(string,int);
virtual ~Human();
string getName();
protected:
private:
string name;
int staj;
};
我创建了包含 2 个元素的列表
list<Human> mylist;
Human x ("Mike",13);
Human y("pavlek",33);
如果有名称为“Mike”的元素,我正在尝试删除,我尝试像这样删除它:
for(list<Human>::iterator it=mylist.begin();it!=mylist.end();++it)
{
if(it->getName()=="Mike")
{
mylist.remove(it);
cout<< "removed";
cout<<it->getName();
}
但是我在将值传递给 remove()
函数时出错,我应该传递什么才能从列表中删除这个元素?
最佳答案
您只是误会了erase
和remove
。根据 C++ 引用,remove
用于 remove from the list all elements whose values are equals to the given parameter .另一方面,erase
removes a single element given its position or a range of elements given the start and end positions .
如果您只需要删除第一个包含 "Mike"
作为其名称的元素,只需执行如下操作:
for(list<Human>::iterator it=mylist.begin();it!=mylist.end();++it)
{
if(it->getName() == "Mike")
{
mylist.erase(it);
break;
}
}
请注意after using erase, your iterator will be invalidated .您可以使用 erase
的返回值来绕过它,这是下一个有效的迭代器值。如果您的列表可能包含名称为 "Mike"
的多个元素,则此详细信息很重要。
关于c++ - 从标准列表中删除元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44123511/