2017-01-27 7 views
-4

Kann jemand mir helfen, dieses Beispiel zu verstehen:Std :: none_of Beispiel von cppreference.com

v ist ein Std :: Vektor hier. Ich denke, dass std :: bind hier bindet, was in der Funktion std :: none_of steht, da es die Bedingung ist. std :: modulus nimmt mod der beiden Parameter. Aber warum ist ihr _1 und 2 ohne den Unterstrich.

if (std::none_of(v.cbegin(), 
       v.cend(), 
       std::bind(std::modulus<int>(), std::placeholders::_1, 2))) { 
     std::cout << "None of them are odd\n"; 
} 
+4

'_1' ist der gebundene Parameter (dh der Wert jedes Elements des Vektors). "2" (ohne das _) ist der Modulwert. –

Antwort

2

std::modulus<int>() ist ein Funktionsobjekt, das zwei Argumente benötigt.

std::bind(std::modulus<int>(), std::placeholders::_1, 2) erstellt ein Funktionsobjekt, das ein Argument dauert. Es braucht ein Argument, weil es einen einzelnen Platzhalter hat. Das zweite Argument zu std::modulus<int>() ist an die Nummer 2 gebunden.

Dann wird none_of über den Bereich von v mit diesem neuen unären Funktionsobjekt aufgerufen und auf jedes Element im Vektor aufgerufen. Also im Grunde überprüft es x % 2 für jedes Element x in v.

Verwandte Themen