unary_negate-Klasse
Eine Klassenvorlage, die eine Memberfunktion bereitstellt, die den Rückgabewert einer angegebenen unären Funktion negiert. Veraltet in C++17 zugunsten von not_fn.
Syntax
template <class Predicate>
class unary_negate
: public unaryFunction<typename Predicate::argument_type, bool>
{
explicit unary_negate(const Predicate& Func);
bool operator()(const typename Predicate::argument_type& left) const;
};
Parameter
Func
Die unäre Funktion, die negiert werden soll.
left
Der Operand der unären Funktion, die negiert werden soll.
Rückgabewert
Die Negation der unären Funktion.
Hinweise
Die Klassenvorlage speichert eine Kopie eines nicht ären Funktionsobjekts _Func. Sie definiert die Memberfunktion operator()
als Rückgabe !_Func(left)
.
Der Konstruktor von unary_negate
wird nur selten direkt verwendet. Die Hilfsfunktion not1 bietet einen einfacheren Weg, um das Adapterprädikat unary_negator zu deklarieren und zu verwenden.
Beispiel
// functional_unary_negate.cpp
// compile with: /EHsc
#include <vector>
#include <functional>
#include <algorithm>
#include <iostream>
using namespace std;
int main()
{
vector<int> v1;
vector<int>::iterator Iter;
int i;
for (i = 0; i <= 7; i++)
{
v1.push_back(5 * i);
}
cout << "The vector v1 = ( ";
for (Iter = v1.begin(); Iter != v1.end(); Iter++)
cout << *Iter << " ";
cout << ")" << endl;
vector<int>::iterator::difference_type result1;
// Count the elements greater than 10
result1 = count_if(v1.begin(), v1.end(), bind2nd(greater<int>(), 10));
cout << "The number of elements in v1 greater than 10 is: "
<< result1 << "." << endl;
vector<int>::iterator::difference_type result2;
// Use the negator to count the elements less than or equal to 10
result2 = count_if(v1.begin(), v1.end(),
unary_negate<binder2nd <greater<int> > >(bind2nd(greater<int>(),10)));
// The following helper function not1 also works for the above line
// not1(bind2nd(greater<int>(), 10)));
cout << "The number of elements in v1 not greater than 10 is: "
<< result2 << "." << endl;
}
The vector v1 = ( 0 5 10 15 20 25 30 35 )
The number of elements in v1 greater than 10 is: 5.
The number of elements in v1 not greater than 10 is: 3.