#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int matrix[9] = { 1,0,0,0,1,0,0,0,5 };
bool status = true;
status = find_if(begin(matrix), end(matrix), [](auto const &value) ->bool
{ if (value != 0 && value != 1) return false; else return true; });
cout << status << endl;
}
我遇到的情况是,我需要查找数组中是否存在不等于1
和0
的值。我想过使用find_if
。但我无法使其发挥作用。
此代码始终为return true
。我该怎么做?如果数组中至少有一个元素为非false
,则最终状态应为1 and 0
。
这里的find_if
方法是正确的吗?
答案 0 :(得分:3)
std::find_if
返回迭代器,而不是bool
。在您的情况下,迭代器是一个指针,它永远不应该为null,因此将始终隐式转换为true
。
您正在寻找std::any_of
。
答案 1 :(得分:1)
find_if
返回一个迭代器。在整数数组的情况下,它返回一个类型为int *
的指针,该指针总是转换为true
,因为它不是空指针。
你应该写
status = find_if(begin(matrix), end(matrix), [](auto const &value) ->bool
{ if (value != 0 && value != 1) return false; else return true; }) != end( matrix );
另一种方法是使用确实返回布尔值的标准算法std::any_of
。