std::not2
| Definiert in der Header-Datei <functional> |
||
| template< class Predicate > std::binary_negate<Predicate> not2( const Predicate& pred ); |
(bis C++14) | |
| template< class Predicate > constexpr std::binary_negate<Predicate> not2( const Predicate& pred ); |
(seit C++14) (veraltet in C++17) (in C++20 entfernt) |
|
std::not2 ist eine Hilfsfunktion zum Erstellen eines Funktions-Objekts, das die Negation der übergebenen binären Prädikatfunktion zurückgibt. Das erstellte Funktions-Objekt hat den Typ std::binary_negate<Predicate>.
Der Typ des binären Prädikats muss zwei Mitgliedstypen definieren: first_argument_type und second_argument_type, die in die Parametertypen des Prädikats konvertierbar sind. Funktions-Objekte, die von std::owner_less, std::ref, std::cref, std::plus, std::minus, std::multiplies, std::divides, std::modulus, std::equal_to, std::not_equal_to, std::greater, std::less, std::greater_equal, std::less_equal, std::logical_not, std::logical_or, std::bit_and, std::bit_or, std::bit_xor, std::mem_fn, std::map::value_comp, std::multimap::value_comp, std::function oder aus einem anderen Aufruf von std::not2 abgeleitet sind, definieren diese Typen, ebenso wie Funktions-Objekte, die vom veralteten std::binary_function abgeleitet sind.
Inhalt |
[bearbeiten] Parameter
| pred | - | binäres Prädikat |
[bearbeiten] Rückgabewert
std::not2 gibt ein Objekt vom Typ std::binary_negate<Predicate> zurück, das mit pred konstruiert wurde.
[bearbeiten] Ausnahmen
(keine)
[bearbeiten] Beispiel
#include <algorithm> #include <cstddef> #include <functional> #include <iostream> #include <vector> struct old_same : std::binary_function<int, int, bool> { bool operator()(int a, int b) const { return a == b; } }; struct new_same { bool operator()(int a, int b) const { return a == b; } }; bool same_fn(int a, int b) { return a == b; } int main() { std::vector<int> v1{0, 1, 2}; std::vector<int> v2{2, 1, 0}; std::vector<bool> v3(v1.size()); std::cout << "negating a binary_function:\n"; std::transform(v1.begin(), v1.end(), v2.begin(), v3.begin(), std::not2(old_same())); std::cout << std::boolalpha; for (std::size_t i = 0; i < v1.size(); ++i) std::cout << v1[i] << ' ' << v2[i] << ' ' << v3[i] << '\n'; std::cout << "negating a standard functor:\n"; std::transform(v1.begin(), v1.end(), v2.begin(), v3.begin(), std::not2(std::equal_to<int>())); for (std::size_t i = 0; i < v1.size(); ++i) std::cout << v1[i] << ' ' << v2[i] << ' ' << v3[i] << '\n'; std::cout << "negating a std::function:\n"; std::transform(v1.begin(), v1.end(), v2.begin(), v3.begin(), std::not2(std::function<bool(int, int)>(new_same()))); for (std::size_t i = 0; i < v1.size(); ++i) std::cout << v1[i] << ' ' << v2[i] << ' ' << v3[i] << '\n'; std::cout << "negating a std::reference_wrapper:\n"; std::transform(v1.begin(), v1.end(), v2.begin(), v3.begin(), std::not2(std::ref(same_fn))); for (std::size_t i = 0; i < v1.size(); ++i) std::cout << v1[i] << ' ' << v2[i] << ' ' << v3[i] << '\n'; }
Ausgabe
negating a binary_function: 0 2 true 1 1 false 2 0 true negating a standard functor: 0 2 true 1 1 false 2 0 true negating a std::function: 0 2 true 1 1 false 2 0 true negating a std::reference_wrapper: 0 2 true 1 1 false 2 0 true
[bearbeiten] Siehe auch
| (C++17) |
erstellt ein Funktions-Objekt, das das Komplement des Ergebnisses des gehaltenen Funktions-Objekts zurückgibt (Funktions-Template) |
| (in C++17 veraltet)(in C++20 entfernt) |
Wrapper-Funktionsobjekt, das die Negation (Komplement) des von ihm gehaltenen binären Prädikats zurückgibt (Klassenvorlage) |
| (C++11) |
kopierfähiger Wrapper für jedes kopierkonstruierbare aufrufbare Objekt (Klassen-Template) |
| (C++23) |
Move-only-Wrapper für jedes aufrufbare Objekt, das Qualifizierer in einer gegebenen Aufrufsignatur unterstützt (Klassen-Template) |
| (in C++17 veraltet)(in C++20 entfernt) |
konstruiert ein benutzerdefiniertes std::unary_negate-Objekt (Funktionsvorlage) |
| (in C++11 veraltet)(in C++17 entfernt) |
erstellt einen adaptor-kompatiblen Funktionsobjekt-Wrapper aus einem Funktionszeiger (Funktionsvorlage) |
| (in C++11 veraltet)(in C++17 entfernt) |
Adaptor-kompatible Basisklasse für binäre Funktionen (Klassenvorlage) |