我有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())`
答案 0 :(得分:2)
可以通过std::mem_fn
:
info1->remove_if(std::mem_fn(&MyClass::Condition));
或通过std::bind
:
using namespace std::placeholders;
info1->remove_if(std::bind(&MyClass::Condition, _1));
这两个功能都包含在标准<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;
}