C ++ find_if函数:

时间:2013-03-02 18:33:22

标签: 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';
  }

任何人都可以帮助我理解为什么会这样吗?

1 个答案:

答案 0 :(得分:5)

A::isOdd必须是static方法。否则,它只能与特定的A一起使用。由于isOdd完全不依赖于成员字段,因此将其保存为static方法。更重要的是,因为它根本不依赖于课程,你可以创建一个全球isOdd

bool isOdd(int i){
    return i % 2;
}

编辑:正如chris所建议的那样,你也可以使用一个简单的lambda(C ++ 11):

auto it = std::find_if (
     myvector.begin(), 
     myvector.end(),
     [](int i) -> bool{ return i % 2; }
);