뭔가

2016-11-21 2 views
1
#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. 나는 find_if을 사용하는 것을 생각했다. 그러나 나는 그것을 작동하게 할 수 없다.뭔가

이 코드는 항상 return true입니다. 어떻게해야합니까? 배열의 요소 중 적어도 하나가 1 and 0이 아닌 경우 마지막 상태는 false이어야합니다.

여기서 find_if 방법이 올바른 것입니까?

+0

find_if iterator를 반환합니다. –

답변

1

find_if 반복자를 반환합니다. 정수 배열의 경우 null 포인터가 아니므로 항상 true으로 변환되는 int * 유형의 포인터를 반환합니다.

당신은 또 다른 방법은 참으로 부울 값을 반환 표준 알고리즘 std::any_of를 사용하는 대신

status = find_if(begin(matrix), end(matrix), [](auto const &value) ->bool 
{ if (value != 0 && value != 1) return false; else return true; }) != end(matrix); 

입니다 작성해야합니다.

3

std::find_ifbool이 아닌 반복기를 반환합니다. 귀하의 경우 iterator는 null이 될 수없는 포인터이므로 항상 암시 적으로 true으로 변환됩니다.

당신은 std::any_of을 찾고 있습니다.

+0

또는 결과를 .end()와 비교하십시오. – Borgleader