代码之家  ›  专栏  ›  技术社区  ›  Naitzirch

当要与结构的成员变量进行比较时,如何在std::list of struct上使用remove_if

  •  1
  • Naitzirch  · 技术社区  · 2 年前

    我有一个 std::list

    我的结构和列表:

    struct Foo
    {
      uint64_t PID;
      uintptr_t addr;
    };
    
    std::list<Foo> FooList;
    

    删除条目的代码:

    uintptr_t Bar;
    FooList.remove_if(???) // Remove when "Foo.addr == Bar";
    
    

    我不知道如何引用 remove_if() 功能,如有任何帮助,将不胜感激!

    谢谢

    奈兹尔赫

    1 回复  |  直到 2 年前
        1
  •  1
  •   The Dreams Wind    2 年前

    list::remove_if 将函数对象作为其参数。您可以使用以下内嵌lambda函数:

    FooList.remove_if([=Bar] (auto &element) {
        return element.addr == Bar
    })
    

    编辑 :请注意,如果 Bar 是在外部声明的局部变量如果lambda 俘虏 它是通过复印的( =Bar )或参考( &Bar )在lambda捕获列表中(前导方括号)