stl remove_if与类成员函数结果

时间:2012-03-29 09:41:43

标签: stl containers functor

我有一个对象容器,列表;和类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 :: less(),std :: mem_fun_ref()或其他stl函数执行此操作。

1 个答案:

答案 0 :(得分:2)

是的,如果您同意稍微更改Foo的界面,则可以在没有lambdas的情况下实现。

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));