C++ find_if功能:
问题描述:
我想了解find_if功能如何工作的,我下面在此参考的例子:C++ find_if功能:
http://www.cplusplus.com/reference/algorithm/find_if/
当我按照上述参考的例子中,这意味着当我使用main(),一切正常。但是,当我尝试包括一个类内部的例子(如我如下图所示),当我编译我得到这个错误:
error: argument of type ‘bool (A::)(int)’ does not match ‘bool (A::*)(int)’
里面我的课:
bool A::IsOdd (int i) {
return ((i%2)==1);
}
void A::function(){
std::vector<int> myvector;
myvector.push_back(10);
myvector.push_back(25);
myvector.push_back(40);
myvector.push_back(55);
std::vector<int>::iterator it = std::find_if (myvector.begin(), myvector.end(), IsOdd);
std::cout << "The first odd value is " << *it << '\n';
}
谁能帮助我了解为什么这是怎么回事?
答
A::isOdd
需要是static
方法。否则,它只能与特定的A
一起使用。由于isOdd
完全不依赖于成员字段,因此将其更改为static
方法将会保存。更有甚者,因为它不依赖于类可言,你可以创建一个全局isOdd
:
bool isOdd(int i){
return i % 2;
}
编辑:由于克里斯的建议,你也可以使用一个简单的拉姆达(C++ 11):
auto it = std::find_if (
myvector.begin(),
myvector.end(),
[](int i) -> bool{ return i % 2; }
);
+1为全局建议。这不是一门课程,一切都需要在课堂上进行,并从中获得收益。当然,另一种选择(除了一个非常相似的函子),希望是一个lambda,一个简单的'[](i){return i%2;}'。 – chris 2013-03-02 18:47:04
我尝试了全球的建议,它的工作。谢谢! – FranXh 2013-03-02 20:14:24