使用std :: list :: remove_if和MyClass'函数

时间:2015-05-26 07:38:01

标签: c++ list stl stdlist

我有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())`

3 个答案:

答案 0 :(得分:2)

可以通过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>标题中。

答案 1 :(得分:-2)

您想要做什么比用户标准算法

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

答案 2 :(得分:-2)

您可以在MyClass中使用添加运算符()并将其用作谓词,这是一个示例:

#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;
}