Bibliothèque standard C++<functional>

Dans la bibliothèque standard C++<functional>Le fichier d'en-tête fournit un ensemble de modèles de fonctions qui nous permettent d'utiliser des objets fonction comme paramètres d'algorithmes, ou comme valeurs de retour d'algorithmes. Les objets fonction sont ceux qui surchargentoperator()des objets qui peuvent être appelés comme des fonctions ordinaires.

En C++, un objet fonction est une classe spéciale qui surchargeoperator()pour permettre aux objets d'être appelés comme des fonctions. Cela nous permet de passer un comportement sous forme d'objets, ce qui augmente la flexibilité et la réutilisabilité du code.

Syntaxe

Pour utiliser<functional>Pour la fonctionnalité dans le fichier d'en-tête, vous devez inclure ce fichier d'en-tête dans votre programme C++ :

#include <functional>

Objets fonction courants

<functional>Le fichier d'en-tête définit quelques objets fonction couramment utilisés, notamment :

  • std::function: un wrapper de fonction polymorphe à usage général.
  • std::bind: utilisé pour lier des arguments à des fonctions.
  • std::plus、std::minus、std::multiplies、std::divides、std::modulus: opérations arithmétiques de base.
  • std::equal_to、std::not_equal_to、std::greater、std::less、std::greater_equal、std::less_equal: opérations de comparaison.
  • std::unary_negate、std::binary_negate: opération de négation logique.
  • std::logical_and、std::logical_or、std::logical_not: opérations logiques.

Exemple

Utilisationstd::function

std::functionest une classe modèle qui peut stocker, appeler et copier tout objet appelable, comme des fonctions, des expressions lambda ou des objets fonction.

Exemple

#include <iostream>
#include <functional>

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

int main() {
    std::function<void()> f = greet; // Utilisation d'une fonction
    f(); // Sortie : Hello, World!

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

    return 0;
}

Utilisationstd::bind

std::bindCela nous permet de créer un objet appelable qui, lorsqu'il est invoqué, lie les arguments donnés à une fonction ou à un objet fonction.

Exemple

#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; // Sortie : 15

    return 0;
}

Dans cet exemple,std::placeholders::_1est un espace réservé qui, lorsqu'on appellebound_add, sera remplacé par les arguments réels.

en utilisant des objets fonction de comparaison

Les objets fonction de comparaison peuvent être utilisés dans des algorithmes, tels questd::sort。

Exemple

#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); // Utilisation d'une fonction de comparaison personnalisée
    for (int i : v) {
        std::cout << i << " "; // Sortie : 1 3 4 5 9
    }

    std::sort(v.begin(), v.end(), std::less<int>()); // Utilisation d'objets fonction de comparaison de la bibliothèque standard
    for (int i : v) {
        std::cout << i << " "; // Sortie : 1 3 4 5 9
    }

    return 0;
}

<functional>Le fichier d'en-tête est une partie très puissante de la bibliothèque standard C++. Il fournit un riche ensemble d'objets fonction et d'utilitaires, nous permettant d'écrire du code plus flexible et réutilisable. En utilisant des objets fonction, nous pouvons passer un comportement en tant que paramètre, ou les stocker dans des conteneurs, ce qui permet d'obtenir des techniques de programmation plus avancées.

autres extensions