2016-11-21 5 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; 

} 

Ich habe eine Situation, wo wir finden müssen, wenn es einen Wert, der zu 1 und 0 in dem Array nicht gleich ist. Ich dachte an find_if. Aber ich kann es nicht funktionieren lassen.find_if ein Element nicht gleich etwas finden

Dieser Code lautet immer return true. Wie mache ich es richtig? Der endgültige Status sollte false sein, wenn mindestens eines der Elemente im Array nicht 1 and 0 ist. Ist die find_if Methode die richtige?

+0

find_if gibt den Iterator zurück –

Antwort

1

find_if gibt einen Iterator zurück. Im Fall des Integer-Arrays wird ein Zeiger vom Typ int * zurückgegeben, der immer in true konvertiert wird, da es kein Nullzeiger ist.

sollten Sie stattdessen

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

Ein anderer Weg, um den Standard-Algorithmus zu verwenden ist std::any_of, die in der Tat gibt einen Booleschen Wert schreiben.

3

std::find_if gibt einen Iterator zurück, kein bool. In Ihrem Fall ist der Iterator ein Zeiger, der niemals null sein sollte und daher immer implizit in true konvertiert wird.

Sie suchen nach std::any_of.

+0

Oder vergleiche einfach das Ergebnis mit .end() – Borgleader