将 std::list::remove_if 与 MyClass 函数一起使用

Using std::list::remove_if with MyClass' function

我有 std::list<MyClass> *info1 我想将 (*info1).remove_if 与 MyClass 的 bool 函数一起使用。正如我所见,每个人都为 remove_if 创建外部函数或结构。不能和bool MyClass::Condition()函数一起使用吗?

像这样:

 class MyClass
{
private:
    int value;
public:
    bool Condition()
    {
      return ( value > 7500);
    }
};

然后

   (*info1).remove_if(Condition())`

可以通过 std::mem_fn:

info1->remove_if(std::mem_fn(&MyClass::Condition));

Live demo

或通过std::bind:

using namespace std::placeholders;
info1->remove_if(std::bind(&MyClass::Condition, _1));

Live demo

这两个函数都包含在标准中 <functional> header。

对于您想做的事情,它比用户标准算法更可取

std::remove_if(info1->begin(), info1->end(),[](MyClass x){return x.Condition();})

您可以在 MyClass 中使用 add an operator() 并将其用作谓词这里是一个示例:

#include <iostream>
#include <list>

using namespace std;
class MyClass
{
  private:
    int value;
  public:
    MyClass(int val) : value(val) {}
    int get_value() const { return value; }
    bool operator()(const MyClass& M)
    {
      return (M.value > 7500);
    }
};

int main() {
  list<MyClass> v;
  v.emplace_back(100);
  v.emplace_back(10000);
  v.emplace_back(500);
  v.emplace_back(7500);
  v.emplace_back(50000);
  v.remove_if(MyClass(0));
  for (const auto& i : v) {
    cout << i.get_value() << "\n";
  }
  return 0;
}