c++ - 从标准列表中删除元素

标签 c++

假设我有以下类(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() 函数时出错,我应该传递什么才能从列表中删除这个元素?

最佳答案

您只是误会了eraseremove。根据 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/

相关文章:

c++ - C++ 中的多个整数类型类

c++ - 如何将 char 数组解析为 double

c++ - 在 codechef 七月挑战赛中无法找到我的逻辑错误

c++ - gem5 模拟 : error when goodbye. sayGoodbye(myName) 调用

c++ - OpenCV 在 eclipse 上运行

c++ - 如何使用 ctime() 函数打印以微秒为单位的时间?

c++ - 内存寻址与数组的混淆

c++ - 将 c 项目转换为桌面应用程序

c# - 在 C# 中调用 C++ DLL 库中的导出函数

c++ - Autotools 不喜欢我项目目录中的 install.sh 脚本