STL的remove_if与类的成员函数的结果(stl remove_if with class m

2019-09-27 23:03发布

我有一个对象容器,清单; 和类Foo有一个成员函数ID()返回一个整数标识符。 现在我想用STL算法的remove_if删除一些对象,其ID小于一个值。 我并不想提供一个功能ID进行比较 ,如果有可能,我写STL的一行代码,但提高来实现它。

class Foo{
public:
  unsigned id() const {return id_;}
  ...
private:
  unsigned id_
  ...
};
list<Foo> foo_list;
std::remove_if(foo_list.begin(), foo_list.end(), ???);

如果STL可以只的std :: bind2nd,STL ::少()的std :: mem_fun_ref()或其他STL功能做到这一点。

Answer 1:

是的,这是有可能实现无lambda表达式,如果您同意改动的接口Foo一点点。

class Foo
  {
public:
  Foo(unsigned id)
    : id_(id) {}
  bool is_equal(unsigned id) const
    { return id_ == id; }
private:
  unsigned id_;
  };

typedef list<Foo> FooList;

FooList foo_list;
foo_list.push_back(Foo(1));
foo_list.push_back(Foo(2));

unsigned to_remove = 1;
foo_list.remove_if(std::bind2nd(std::mem_fun_ref(&Foo::is_equal), to_remove));


文章来源: stl remove_if with class member function result