将 std::list::remove_if 与 MyClass 函数一起使用
Using std::list::remove_if with MyClass' function
我有 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())`
可以通过 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>
header。
对于您想做的事情,它比用户标准算法更可取
std::remove_if(info1->begin(), info1->end(),[](MyClass x){return x.Condition();})
您可以在 MyClass 中使用 add an operator() 并将其用作谓词这里是一个示例:
#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;
}
我有 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())`
可以通过 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>
header。
对于您想做的事情,它比用户标准算法更可取
std::remove_if(info1->begin(), info1->end(),[](MyClass x){return x.Condition();})
您可以在 MyClass 中使用 add an operator() 并将其用作谓词这里是一个示例:
#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;
}