gpt4 book ai didi

C++ find_if 函数 :

转载 作者:行者123 更新时间:2023-11-30 01:23:19 25 4
gpt4 key购买 nike

我正在尝试了解 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;
}

编辑:正如克里斯所建议的,您还可以使用简单的 lambda (C++11):

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

关于C++ find_if 函数 :,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15177928/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com