【发布时间】:2012-04-12 22:45:59
【问题描述】:
我有一个对象容器,列表;类 Foo 有一个成员函数 id() 返回一个整数标识符。 现在我想使用 stl 算法 remove_if 来删除一些 id 小于某个值的对象。 我不想提供id比较功能,如果我可以用STL写一行代码但boost来实现它。
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 函数来做到这一点。
【问题讨论】:
-
如果您有足够现代的编译器,请查找lambdas。
-
@Joachim Pileborg 我使用 vs2005,不支持 C++11。
-
嗯,你在这 3 个 std 助手的帮助下走在了正确的轨道上,但不幸的是 C++ 不包括 SGI 的 compose 函数适配器。所以你不会绕过你自己的函子。这正是 C++11 的 lambda(和通用绑定器)大大提高了标准算法的可用性的原因。
标签: stl containers functor