C++-Standardbibliothek<functional>

In der C++-Standardbibliothek<functional>Die Header-Datei stellt eine Reihe von Funktionsvorlagen bereit, die es uns ermöglichen, Funktionsobjekte als Parameter für Algorithmen oder als Rückgabewerte von Algorithmen zu verwenden. Funktionsobjekte sind solche, die überladenoperator()Objekte, die wie gewöhnliche Funktionen aufgerufen werden können.

In C++ ist ein Funktionsobjekt eine spezielle Klasse, die überlädtoperator()um zu ermöglichen, dass Objekte wie Funktionen aufgerufen werden. Dies ermöglicht es uns, Verhalten als Objekte zu übergeben, was die Flexibilität und Wiederverwendbarkeit des Codes erhöht.

Syntax

Um<functional>Um die Funktionalität der Header-Datei zu nutzen, müssen Sie diese Header-Datei in Ihr C++-Programm einbinden:

#include <functional>

Gängige Funktionsobjekte

<functional>Die Header-Datei definiert einige häufig verwendete Funktionsobjekte, darunter:

  • std::function: ein universeller polymorpher Funktionswrapper.
  • std::bind: dient zum Binden von Argumenten an Funktionen.
  • std::plus、std::minus、std::multiplies、std::divides、std::modulus: grundlegende arithmetische Operationen.
  • std::equal_to、std::not_equal_to、std::greater、std::less、std::greater_equal、std::less_equal: Vergleichsoperationen.
  • std::unary_negate、std::binary_negate: logische Negationsoperation.
  • std::logical_and、std::logical_or、std::logical_not: logische Operationen.

Beispiel

Nutzungstd::function

std::functionist eine Template-Klasse, die jedes aufrufbare Objekt speichern, aufrufen und kopieren kann, wie Funktionen, Lambda-Ausdrücke oder Funktionsobjekte.

Beispiel

#include <iostream>
#include <functional>

void greet() {
    std::cout << "Hello, World!" << std::endl;
}

int main() {
    std::function<void()> f = greet; // Eine Funktion verwenden
    f(); // Ausgabe: Hello, World!

    std::function<void()> lambda = []() {
        std::cout << "Hello, Lambda!" << std::endl;
    };
    lambda(); // Ausgabe: Hello, Lambda!

    return 0;
}

Nutzungstd::bind

std::bindErmöglicht es uns, ein aufrufbares Objekt zu erstellen, das beim Aufruf die angegebenen Argumente an eine Funktion oder ein Funktionsobjekt bindet.

Beispiel

#include <iostream>
#include <functional>

int add(int a, int b) {
    return a + b;
}

int main() {
    auto bound_add = std::bind(add, 5, std::placeholders::_1);
    std::cout << bound_add(10) << std::endl; // Ausgabe: 15

    return 0;
}

In diesem Beispiel,std::placeholders::_1ist ein Platzhalter, der beim Aufrufbound_add, durch die tatsächlichen Argumente ersetzt wird.

unter Verwendung von Vergleichsfunktionsobjekten

Vergleichsfunktionsobjekte können in Algorithmen verwendet werden, wie z. B.std::sort。

Beispiel

#include <iostream>
#include <vector>
#include <algorithm>
#include <functional>

bool compare(int a, int b) {
    return a < b;
}

int main() {
    std::vector<int> v = {5, 3, 9, 1, 4};
    std::sort(v.begin(), v.end(), compare); // Verwendung einer benutzerdefinierten Vergleichsfunktion
    for (int i : v) {
        std::cout << i << " "; // Ausgabe: 1 3 4 5 9
    }

    std::sort(v.begin(), v.end(), std::less<int>()); // Verwendung von Vergleichsfunktionsobjekten der Standardbibliothek
    for (int i : v) {
        std::cout << i << " "; // Ausgabe: 1 3 4 5 9
    }

    return 0;
}

<functional>Die Header-Datei ist ein sehr leistungsfähiger Teil der C++-Standardbibliothek. Sie bietet eine reichhaltige Sammlung von Funktionsobjekten und Hilfsprogrammen, mit denen wir flexibleren und wiederverwendbaren Code schreiben können. Durch die Verwendung von Funktionsobjekten können wir Verhalten als Parameter übergeben oder in Containern speichern und dadurch fortgeschrittenere Programmiertechniken erreichen.

Weitere Erweiterungen