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

How to use remove_if on an std::list of structs when you want to compare to a member variable of the struct

我有一个 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() 函数中引用结构实例,任何帮助将不胜感激!

谢谢,

奈齐尔奇

list::remove_if 接受一个函数对象作为它的参数。您可以像这样使用内联 lambda 函数进行馈送:

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

编辑:注意如果Bar是lambda外声明的局部变量,需要capture它通过 lambda 捕获列表(前导方括号)

中的副本(Bar)或引用(&Bar