find_if找到一个不等于某个东西的元素

时间:2016-11-21 14:17:40

标签: c++ arrays algorithm iterator

#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;

}

我遇到的情况是,我需要查找数组中是否存在不等于10的值。我想过使用find_if。但我无法使其发挥作用。

此代码始终为return true。我该怎么做?如果数组中至少有一个元素为非false,则最终状态应为1 and 0

这里的find_if方法是正确的吗?

2 个答案:

答案 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