Maison  >  Article  >  développement back-end  >  Comment les algorithmes génériques en C++ réutilisent-ils les fonctionnalités ?

Comment les algorithmes génériques en C++ réutilisent-ils les fonctionnalités ?

王林
王林original
2024-06-05 19:41:001119parcourir

Les algorithmes génériques C++ peuvent réutiliser des opérations courantes, notamment : des algorithmes de tri (tels que le tri) des algorithmes de recherche (tels que find) des opérations d'ensemble (telles que set_difference) des algorithmes de conversion (tels que transform) Lorsque vous utilisez des algorithmes génériques, vous devez fournir des conteneurs d'entrée et des conteneurs de sortie (facultatifs) et un objet fonction comme paramètres. Par exemple, l’algorithme de tri peut être utilisé pour trier des tableaux d’entiers. Des comparateurs personnalisés peuvent être utilisés pour trier les données selon des règles spécifiques. Dans des cas pratiques, l'algorithme std::max_element peut être utilisé pour trouver la valeur maximale dans un conteneur, améliorant ainsi la simplicité et la maintenabilité du code.

C++ 中的泛型算法是如何复用功能的?

Algorithme générique C++ : un outil puissant pour la réutilisation du code

La bibliothèque standard C++ fournit de puissants algorithmes génériques, permettant aux programmeurs de réutiliser des opérations courantes et d'éviter d'avoir à écrire du code à plusieurs reprises. Ces algorithmes sont fournis sous forme de modèles et peuvent être appliqués à différents types de données.

Catégories d'algorithmes

Les algorithmes génériques de la bibliothèque standard peuvent être divisés en plusieurs catégories :

  • Algorithmes de tri (tels que sort et stable_sort) li> sortstable_sort
  • 搜索算法(例如 findbinary_search
  • 集合操作(例如 set_differenceset_intersection
  • 转换算法(例如 transformcopy)

使用方法

使用泛型算法很简单。只需传递一个输入容器、一个输出容器(如果需要)和一个 function 对象作为参数即可。

例如,以下代码使用 sort 算法对整数数组排序:

#include <algorithm>

int main() {
  int myArray[] = {4, 1, 3, 2};
  std::sort(std::begin(myArray), std::end(myArray));

  for (int i : myArray) {
    std::cout << i << " ";  // 输出:1 2 3 4
  }
}

自定义比较器

对于需要根据自定义比较器进行排序的情况,可以使用泛型算法 std::sortComparator 参数。

例如,以下代码使用 lambda 表达式定义自定义比较器,以逆序排序数字:

#include <algorithm>

int main() {
  int myArray[] = {4, 1, 3, 2};
  std::sort(std::begin(myArray), std::end(myArray), [](int a, int b) { return a > b; });

  for (int i : myArray) {
    std::cout << i << " ";  // 输出:4 3 2 1
  }
}

实战案例:查找最大值

假设我们有一个学生成绩列表,需要找出最大值。我们可以使用 std::max_elementAlgorithmes de recherche (tels que find et binary_search)

Opérations de définition (telles que set_difference et set_intersection) <p>Algorithmes de conversion (tels que <code>transform et copy)

🎜Utilisation🎜🎜🎜L'utilisation d'algorithmes génériques est simple. Passez simplement un conteneur d'entrée, un conteneur de sortie (si nécessaire) et un objet function comme arguments. 🎜🎜Par exemple, le code suivant trie un tableau d'entiers à l'aide de l'algorithme sort : 🎜
#include <algorithm>
#include <vector>

int main() {
  std::vector<int> scores = {85, 90, 78, 95, 82};
  int maxScore = *std::max_element(scores.begin(), scores.end());
  std::cout << "最高分:" << maxScore;  // 输出:95
}
🎜🎜Comparateur personnalisé🎜🎜🎜Pour les situations où vous devez trier en fonction d'un comparateur personnalisé, vous pouvez utiliser l'algorithme génériqueComparator de code>std::sort. 🎜🎜Par exemple, le code suivant utilise une expression lambda pour définir un comparateur personnalisé afin de trier les nombres dans l'ordre inverse : 🎜rrreee🎜🎜Exemple pratique : trouver le maximum 🎜🎜🎜Supposons que nous ayons une liste de notes d'élèves et que nous devions trouver la maximum. Nous pouvons utiliser l'algorithme std::max_element : 🎜rrreee🎜En tirant parti de l'algorithme générique, nous n'avons pas besoin d'écrire notre propre fonction find maximum, mais pouvons réutiliser le code de la bibliothèque standard, qui améliore la simplicité et la maintenabilité du code. 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn