gpt4 book ai didi

c++ - 用仿函数检查 vector 的每个元素

转载 作者:搜寻专家 更新时间:2023-10-31 00:12:58 25 4
gpt4 key购买 nike

我正在尝试检测 vector 的每个元素是否都满足给定条件,假设它必须是偶数。

#include <iostream> 
#include <vector>
#include <algorithm>

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

int main()
{
int arr[5]={1,2,3,4,5};
std::vector<int> myVec(arr, arr + sizeof(arr)/sizeof(arr[0]));

std::vector<int>::iterator it = std::find_if(myVec.begin(), myVec.end(),
isOdd());

// This piece of code is probably causing some problems;

while(myVec.empty()!=false) // while my vector IS NOT EMPTY
{
std::cout << *it << " "; // print out the value of elements that
// fullfiled the condition given in isOdd
}

return 0;
}

我的思维方式有什么问题? while 循环中的条件是错误的还是我完全错过了逻辑?

您能否就这段代码的错误向我提供一些复杂的解释?

提前致谢。

附言我知道有可能改用 lambda 函数,但我不想太困惑 :)

最佳答案

您的方法的问题是您只找到奇数一次,然后由于某种原因您希望 vector 发生变化,而不进行任何修改。

你应该创建一个重复调用 find_if 的循环,如下所示:

bool isOdd(int i) {
return i%2!=0;
}
...
std::vector<int>::iterator it = myVec.begin();
for (;;) {
it = std::find_if(it, myVec.end(), isOdd);
if (it == myVec.end()) {
break;
}
std::cout << *it << " ";
++it;
}

Demo.

注意:我更改了您的 isOdd 函数以针对奇数返回 true。原始版本为偶数返回 true

关于c++ - 用仿函数检查 vector 的每个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28619866/

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