Namespaces
Variants

Bibliothèque d'algorithmes

Depuis fr.cppreference.net
< cpp
 
 
Bibliothèque d'algorithmes
Algorithmes contraints et algorithmes sur plages (C++20)
Algorithmes contraints, par ex. ranges::copy, ranges::sort, ...
Opérations de séquence non modificatrices    
Opérations par lot
(C++17)
Opérations de recherche
Opérations de séquence modificatrices
Opérations de copie
(C++11)
(C++11)
Opérations d'échange
Opérations de transformation
Opérations de génération
Opérations de suppression
Opérations de changement d'ordre
(jusqu'à C++17)(C++11)
(C++20)(C++20)
Opérations d'échantillonnage
(C++17)

Tri et opérations connexes
Opérations de partitionnement
(C++11)    

Opérations de tri
Opérations de recherche binaire
(sur plages partitionnées)
Opérations d'ensemble (sur plages triées)
Opérations de fusion (sur plages triées)
Opérations de tas
Opérations de minimum/maximum
(C++11)
(C++17)
Opérations de comparaison lexicographique
Opérations de permutation


 

La bibliothèque d'algorithmes définit des fonctions pour divers usages (par exemple recherche, tri, comptage, manipulation) qui opèrent sur des plages d'éléments.

Algorithmes contraints (depuis C++20)

C++20 fournit des versions contraintes de la plupart des algorithmes dans l'espace de noms std::ranges. Dans ces algorithmes, un intervalle peut être spécifié soit comme une paire itérateur-sentinelle, soit comme un seul argument intervalle, et les projections et les appelables par pointeur sur membre sont pris en charge. De plus, les types de retour de la plupart des algorithmes ont été modifiés pour renvoyer toutes les informations potentiellement utiles calculées lors de l'exécution de l'algorithme.

std::vector<int> v{7, 1, 4, 0, -1};
std::ranges::sort(v); // constrained algorithm

Algorithmes parallèles (depuis C++17)

Un algorithme parallèle est un modèle de fonction dans la bibliothèque d'algorithmes avec un paramètre de modèle nommé ExecutionPolicy ou contraint par execution-policy (depuis C++26). Un tel paramètre de modèle est appelé un paramètre de modèle de politique d'exécution , il décrit la manière dont l'exécution d'un algorithme parallèle peut être parallélisée.

Sauf indication contraire, les algorithmes parallèles sont autorisés à faire des copies arbitraires d'éléments des plages, tant que std::is_trivially_copy_constructible_v<T> et std::is_trivially_destructible_v<T> sont true, où T est le type des éléments.

Politiques d'exécution

Les algorithmes de la bibliothèque standard supportent plusieurs politiques d'exécution, et la bibliothèque fournit des types et des objets de politique d'exécution correspondants. Les utilisateurs peuvent sélectionner une politique d'exécution de manière statique en invoquant un algorithme parallèle avec un objet de politique d'exécution du type correspondant.

Les implémentations de la bibliothèque standard (mais pas les utilisateurs) peuvent définir des politiques d'exécution supplémentaires comme extension. La sémantique des algorithmes parallèles invoqués avec un objet de politique d'exécution de type défini par l'implémentation est définie par l'implémentation.

Défini dans l'en-tête <execution>
Défini dans l'espace de noms std::execution
types de politique d'exécution
(classe)
(C++17)(C++17)(C++17)(C++20)
objets globaux de politique d'exécution
(constante)
Défini dans l'espace de noms std
teste si une classe représente une politique d'exécution
(modèle de classe)
spécifie qu'un type représente une politique d'exécution
(concept d'exposition uniquement*)

Opérations de séquence non modifiantes

Opérations par lots

Défini dans l'en-tête <algorithm>
applique un objet fonction unaire aux éléments d'une plage
(modèle de fonction & objet fonction d'algorithme)
applique un objet fonction aux N premiers éléments d'une séquence
(modèle de fonction & objet fonction d'algorithme)

Opérations de recherche

Défini dans l'en-tête <algorithm>
(C++11)(C++11)(C++11)
vérifie si un prédicat est true pour tous, certains ou aucun des éléments d'une plage
(modèle de fonction & objet fonction d'algorithme)
vérifie si la plage contient l'élément ou la sous-plage donné
(objet fonction d'algorithme)
trouve le premier élément satisfaisant des critères spécifiques
(modèle de fonction & objet fonction d'algorithme)
trouve le dernier élément satisfaisant des critères spécifiques
(objet fonction d'algorithme)
trouve la dernière séquence d'éléments dans une plage donnée
(modèle de fonction & objet fonction d'algorithme)
recherche l'un des éléments d'un ensemble
(modèle de fonction & objet fonction d'algorithme)
trouve les deux premiers éléments adjacents qui sont égaux (ou satisfont un prédicat donné)
(modèle de fonction & objet fonction d'algorithme)
retourne le nombre d'éléments satisfaisant des critères spécifiques
(modèle de fonction & objet fonction d'algorithme)
trouve la première position où deux plages diffèrent
(modèle de fonction & objet fonction d'algorithme)
détermine si deux ensembles d'éléments sont identiques
(modèle de fonction & objet fonction d'algorithme)
recherche la première occurrence d'une plage d'éléments
(modèle de fonction & objet fonction d'algorithme)
recherche la première occurrence d'un nombre de copies consécutives d'un élément dans une plage
(modèle de fonction & objet fonction d'algorithme)
vérifie si une plage commence par une autre plage
(objet fonction d'algorithme)
vérifie si une plage se termine par une autre plage
(objet fonction d'algorithme)

Opérations de repli (depuis C++23)

Défini dans l'en-tête <algorithm>
réduit à gauche une plage d'éléments
(objet fonction algorithme)
réduit à gauche une plage d'éléments en utilisant le premier élément comme valeur initiale
(objet fonction algorithme)
réduit à droite une plage d'éléments
(objet fonction algorithme)
réduit à droite une plage d'éléments en utilisant le dernier élément comme valeur initiale
(objet fonction algorithme)
réduit à gauche une plage d'éléments et retourne une paire (itérateur, valeur)
(objet fonction algorithme)
réduit à gauche une plage d'éléments en utilisant le premier élément comme valeur initiale et retourne une paire (itérateur, optional )
(objet fonction algorithme)

Opérations de modification de séquence

Opérations de copie

Défini dans l'en-tête <algorithm>
copie une plage d'éléments vers un nouvel emplacement
(modèle de fonction & objet fonction d'algorithme)
(C++11)
copie un nombre d'éléments vers un nouvel emplacement
(modèle de fonction & objet fonction d'algorithme)
copie une plage d'éléments en ordre inverse
(modèle de fonction & objet fonction d'algorithme)
(C++11)
déplace une plage d'éléments vers un nouvel emplacement
(modèle de fonction & objet fonction d'algorithme)
déplace une plage d'éléments vers un nouvel emplacement en ordre inverse
(modèle de fonction & objet fonction d'algorithme)

Opérations d'échange

Défini dans l'en‑tête <algorithm>      (jusqu'à C++11)
Défini dans l'en‑tête <utility>          (depuis C++11)
Défini dans l'en‑tête <string_view>
échange les valeurs de deux objets
(modèle de fonction)
Défini dans l'en‑tête <algorithm>
échange deux plages d'éléments
(modèle de fonction & objet fonction d'algorithme)
échange les éléments pointés par deux itérateurs
(modèle de fonction)

Opérations de transformation

Définie dans l'en-tête <algorithm>
applique une fonction à une plage d'éléments, stockant les résultats dans une plage de destination
(modèle de fonction & objet fonction d'algorithme)
remplace toutes les valeurs satisfaisant à des critères spécifiques par une autre valeur
(modèle de fonction & objet fonction d'algorithme)
copie une plage, en remplaçant les éléments satisfaisant à des critères spécifiques par une autre valeur
(modèle de fonction & objet fonction d'algorithme)

Opérations de génération

Défini dans l'en-tête <algorithm>
copie-assigne la valeur donnée à chaque élément d'une plage
(modèle de fonction & objet fonction d'algorithme)
copie-assigne la valeur donnée à N éléments d'une plage
(modèle de fonction & objet fonction d'algorithme)
assigne les résultats d'appels de fonction successifs à chaque élément d'une plage
(modèle de fonction & objet fonction d'algorithme)
assigne les résultats d'appels de fonction successifs à N éléments d'une plage
(modèle de fonction & objet fonction d'algorithme)

Opérations de suppression

Défini dans l'en-tête <algorithm>
supprime les éléments satisfaisant des critères spécifiques
(modèle de fonction & objet fonction d'algorithme)
copie une plage d'éléments en omettant ceux qui satisfont des critères spécifiques
(modèle de fonction & objet fonction d'algorithme)
supprime les éléments consécutifs en double dans une plage
(modèle de fonction & objet fonction d'algorithme)
crée une copie d'une plage d'éléments ne contenant aucun doublon consécutif
(modèle de fonction & objet fonction d'algorithme)

Opérations modifiant l'ordre

Définie dans l'en-tête <algorithm>
inverse l'ordre des éléments dans une plage
(modèle de fonction & objet fonction d'algorithme)
crée une copie inversée d'une plage
(modèle de fonction & objet fonction d'algorithme)
fait pivoter l'ordre des éléments dans une plage
(modèle de fonction & objet fonction d'algorithme)
copie et fait pivoter une plage d'éléments
(modèle de fonction & objet fonction d'algorithme)
décale les éléments dans une plage
(modèle de fonction & objet fonction d'algorithme)
(jusqu'à C++17)(C++11)
réorganise aléatoirement les éléments dans une plage
(modèle de fonction & objet fonction d'algorithme)

Opérations d'échantillonnage

Défini dans l'en-tête <algorithm>
(C++17)
sélectionne N éléments aléatoires d'une séquence
(modèle de fonction & objet fonction d'algorithme)

Tri et opérations associées

Exigences

Certains algorithmes exigent que la séquence représentée par les arguments soit « triée » ou « partitionnée ». Le comportement est indéfini si l'exigence n'est pas satisfaite.

Une séquence est triée par rapport à un comparateur comp si pour tout itérateur iter pointant sur la séquence et tout entier non négatif n tel que iter + n[1] soit un itérateur valide pointant vers un élément de la séquence, comp(*(iter + n), *iter) == false[1].

(jusqu'à C++20)

Une séquence est triée par rapport à comp et proj pour un comparateur comp et une projection proj si pour tout itérateur iter pointant sur la séquence et tout entier non négatif n tel que iter + n[1] soit un itérateur valide pointant vers un élément de la séquence, bool(std::invoke(comp, std::invoke(proj, *(iter + n)),
                       std::invoke(proj, *iter)))
[1] est false.

Une séquence est triée par rapport à un comparateur comp si la séquence est triée par rapport à comp et std::identity{} (la projection identité).

(depuis C++20)

Une séquence [startfinish) est partitionnée par rapport à une expression f(e) s'il existe un entier n tel que pour tout i dans [0std::distance(start, finish)), f(*(start + i))[1] est true si et seulement si i < n.

  1. 1.0 1.1 1.2 1.3 1.4 iter + n signifie simplement « le résultat de iter étant incrémenté n fois », indépendamment du fait que iter soit un itérateur à accès aléatoire.

Opérations de partitionnement

Défini dans l'en-tête <algorithm>
détermine si la plage est partitionnée selon le prédicat donné
(modèle de fonction & objet fonction d'algorithme)
divise une plage d'éléments en deux groupes
(modèle de fonction & objet fonction d'algorithme)
copie une plage en divisant les éléments en deux groupes
(modèle de fonction & objet fonction d'algorithme)
divise les éléments en deux groupes tout en conservant leur ordre relatif au sein de chaque groupe
(modèle de fonction & objet fonction d'algorithme)
localise le point de partitionnement d'une plage partitionnée
(modèle de fonction & objet fonction d'algorithme)

Opérations de tri

Définie dans l'en-tête <algorithm>
trie une plage d'éléments
(modèle de fonction & objet fonction d'algorithme)
trie une plage d'éléments tout en préservant l'ordre relatif des éléments équivalents
(modèle de fonction & objet fonction d'algorithme)
trie les N premiers éléments d'une plage
(modèle de fonction & objet fonction d'algorithme)
copie et trie partiellement une plage d'éléments
(modèle de fonction & objet fonction d'algorithme)
(C++11)
vérifie si une plage est triée
(modèle de fonction & objet fonction d'algorithme)
trouve la plus grande sous-plage triée
(modèle de fonction & objet fonction d'algorithme)
trouve le N-ième élément si la plage était triée
(modèle de fonction & objet fonction d'algorithme)

Opérations de recherche binaire (sur des plages partitionnées)

Défini dans l'en-tête <algorithm>
trouve le premier élément non inférieur à la valeur donnée en utilisant la recherche binaire
(modèle de fonction & objet fonction d'algorithme)
trouve le premier élément supérieur à la valeur donnée en utilisant la recherche binaire
(modèle de fonction & objet fonction d'algorithme)
trouve la plage d'éléments correspondant à la valeur donnée en utilisant la recherche binaire
(modèle de fonction & objet fonction d'algorithme)
détermine si un élément existe dans une plage en utilisant la recherche binaire
(modèle de fonction & objet fonction d'algorithme)

Opérations sur les ensembles (sur des plages triées)

Défini dans l'en-tête <algorithm>
détermine si une séquence est une sous-séquence d'une autre
(modèle de fonction & objet fonction d'algorithme)
calcule l'union de deux ensembles
(modèle de fonction & objet fonction d'algorithme)
calcule l'intersection de deux ensembles
(modèle de fonction & objet fonction d'algorithme)
calcule la différence entre deux ensembles
(modèle de fonction & objet fonction d'algorithme)
calcule la différence symétrique entre deux ensembles
(modèle de fonction & objet fonction d'algorithme)

Opérations de fusion (sur des plages triées)

Défini dans l'en-tête <algorithm>
fusionne deux plages triées
(modèle de fonction & objet de fonction d'algorithme)
fusionne deux plages ordonnées en place
(modèle de fonction & objet de fonction d'algorithme)

Opérations sur les tas

Une plage à accès aléatoire [firstlast) est un tas par rapport à un comparateur comp si bool(comp(first[(i - 1) / 2], first[i])) est false pour tout entier i dans (0last - first).

(jusqu'à C++20)

Une plage à accès aléatoire [firstlast) est un tas par rapport à comp et proj pour un comparateur comp et une projection proj si bool(std::invoke(comp, std::invoke(proj, first[(i - 1) / 2]),
                       std::invoke(proj, first[i]))
est false pour tout entier i dans (0last - first).

Une plage à accès aléatoire [firstlast) est un tas par rapport à un comparateur comp si la plage est un tas par rapport à comp et std::identity{} (la projection identité).

(depuis C++20)

Un tas peut être créé par std::make_heap et ranges::make_heap(depuis C++20).

Pour plus de propriétés du tas, voir tas max.


Défini dans l'en-tête <algorithm>
ajoute un élément à un tas max
(modèle de fonction & objet de fonction d'algorithme)
supprime le plus grand élément d'un tas max
(modèle de fonction & objet de fonction d'algorithme)
crée un tas max à partir d'une plage d'éléments
(modèle de fonction & objet de fonction d'algorithme)
transforme un tas max en une plage d'éléments triés en ordre croissant
(modèle de fonction & objet de fonction d'algorithme)
(C++11)
vérifie si la plage donnée est un tas max
(modèle de fonction & objet de fonction d'algorithme)
trouve la plus grande sous-plage qui est un tas max
(modèle de fonction & objet de fonction d'algorithme)

Opérations de minimum/maximum

Défini dans l'en-tête <algorithm>
renvoie la plus grande des valeurs données
(modèle de fonction & objet fonction d'algorithme)
renvoie le plus grand élément d'une plage
(modèle de fonction & objet fonction d'algorithme)
renvoie la plus petite des valeurs données
(modèle de fonction & objet fonction d'algorithme)
renvoie le plus petit élément d'une plage
(modèle de fonction & objet fonction d'algorithme)
(C++11)
renvoie le plus petit et le plus grand de deux éléments
(modèle de fonction & objet fonction d'algorithme)
renvoie le plus petit et le plus grand éléments d'une plage
(modèle de fonction & objet fonction d'algorithme)
(C++17)
limite une valeur entre une paire de valeurs limites
(modèle de fonction & objet fonction d'algorithme)

Opérations de comparaison lexicographique

Définie dans l'en-tête <algorithm>
compare deux plages lexicographiquement
(gabarit de fonction & objet fonction d'algorithme)
compare deux plages en utilisant la comparaison à trois voies
(gabarit de fonction)

Opérations de permutation

Défini dans l'en-tête <algorithm>
génère la permutation lexicographique immédiatement supérieure d'une plage d'éléments
(modèle de fonction & objet fonction d'algorithme)
génère la permutation lexicographique immédiatement inférieure d'une plage d'éléments
(modèle de fonction & objet fonction d'algorithme)
détermine si une séquence est une permutation d'une autre séquence
(modèle de fonction & objet fonction d'algorithme)

Opérations numériques

Définie dans l'en-tête <numeric>
(C++11)
remplit une plage avec des incréments successifs de la valeur de départ
(modèle de fonction & objet de fonction d'algorithme)
additionne ou plie une plage d'éléments
(modèle de fonction)
calcule le produit scalaire de deux plages d'éléments
(modèle de fonction)
calcule les différences entre éléments adjacents dans une plage
(modèle de fonction)
calcule la somme partielle d'une plage d'éléments
(modèle de fonction)
(C++17)
similaire à std::accumulate, sauf dans le désordre
(modèle de fonction)
similaire à std::partial_sum, exclut le ith élément d'entrée de la ith somme
(modèle de fonction)
similaire à std::partial_sum, inclut le ith élément d'entrée dans la ith somme
(modèle de fonction)
applique un invocable, puis réduit dans le désordre
(modèle de fonction)
applique un invocable, puis calcule le balayage exclusif
(modèle de fonction)
applique un invocable, puis calcule le balayage inclusif
(modèle de fonction)

Spécialisés <memory> algorithmes

Algorithmes spécialisés <random> algorithmes (depuis C++26)

Défini dans l'en-tête <random>
remplit une plage avec des nombres aléatoires provenant d'un générateur de bits aléatoires uniforme
(objet fonction d'algorithme)

Notes

Macro de test de fonctionnalité Valeur Std Fonctionnalité
__cpp_lib_algorithm_iterator_requirements 202207L (C++23) Itérateurs Ranges en entrée des algorithmes non-Ranges
__cpp_lib_clamp 201603L (C++17) std::clamp
__cpp_lib_constexpr_algorithms 201806L (C++20) Constexpr pour les algorithmes
202306L (C++26) Tri stable constexpr
__cpp_lib_algorithm_default_value_type 202403L (C++26) Initialisation par liste pour les algorithmes
__cpp_lib_freestanding_algorithm 202311L (C++26) Fonctionnalités autonomes dans <algorithm>
__cpp_lib_robust_nonmodifying_seq_ops 201304L (C++14) Rendre les opérations de séquence non modifiantes plus robustes (surcharges à deux plages pour std::mismatch , std::equal et std::is_permutation)
__cpp_lib_sample 201603L (C++17) std::sample
__cpp_lib_shift 201806L (C++20) std::shift_left et std::shift_right

Bibliothèque C

Défini dans l'en-tête <cstdlib>
trie une plage d'éléments de type non spécifié
(fonction)
recherche un élément de type non spécifié dans un tableau
(fonction)

Rapports de défauts

Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.

DR Appliqué à Comportement publié Comportement corrigé
LWG 193 C++98 le tas exigeait que * first soit le plus grand élément il peut y avoir des éléments
égaux à * first
LWG 2150 C++98 la définition d'une séquence triée était incorrecte corrigée
LWG 2166 C++98 l'exigence de tas ne correspondait pas
suffisamment à la définition du tas maximum
exigence améliorée

Voir aussi

Documentation C pour Algorithms