Algorithmes
Les algorithmes sont une première partie de la norme TEMPLATE Library. Les algorithmes ne fonctionnent pas avec les conteneurs eux-mêmes mais plutôt les itérateurs. Par conséquent, le même algorithme peut être utilisé par le plus si tous les conteneurs STL de. Cette section décrit les conventions et la terminologie des algorithmes de STL.
Notes
Les descriptions des fonctions d'algorithme utilisent plusieurs expressions de sténographie :
L'expression « dans la plage [A, B) » correspond à la séquence de valeurs discrètes zéro ou plus à partir de Un jusqu'à la limite de B. Une plage est valide uniquement si Binaire est accessible d'Une ; vous pouvez stocker un objet dans un objet N' (N = A), incrémenter l'objet est zéro ou plus (++N), et pour comparer l'objet égal à ( après un nombre fini d'incréments (== N B).
L'expression « chaque N dans la plage [A, B) » signifie que N commence par la valeur Est et est incrémenté zéro ou plusieurs fois jusqu'à ce qu'il est égale à la valeur Binaire. == B du cas N n'est pas comprise.
L'expression « la valeur minimale de N dans la plage [A, *B)*tels que les valeurs » signifie que la condition X est déterminée pour chaque N dans la plage [A, *B)*jusqu'à ce que la condition X est remplie.
L'expression « la valeur la plus élevée N dans la plage [A, *B)*tels que les valeurs signifie que les valeurs sont déterminés par N dans la plage [A, B). La fonction stockez dans K une copie de N chaque fois que la condition X est remplie. Si une telle magasin se produit, la fonction remplace la valeur finale de N, qui est B, avec la valeur d'K. Pour un bidirectionnel ou un itérateur l'accès aléatoire ; toutefois, il peut également indiquer que N commence par la valeur la plus élevée dans la plage et est décrémenté sur la plage jusqu'à ce que la condition X est remplie.
Expressions telles que X - O, où X et Y peuvent être des itérateurs autres que les itérateurs l'accès aléatoire, sont attendus dans le sens mathématique. La fonction n'a pas nécessairement l'opérateur - s'il doit tester une telle valeur. Le même est également vrai pour les expressions telles que N + X ou X - N, où N est un type integer.
Plusieurs algorithmes se servent d'un attribut qui effectue par couple une comparaison, comme avec operator==, pour afficher le résultat de bool. La fonction de prédicat operator==, ou aucun remplacement pour est, ne doit pas modifier des opérandes. Il doit donner le même résultat d'bool chaque fois qu'il est évalué, il doit donner le même résultat si une copie de l'un des deux opérandes est substituée à l'opérande.
Plusieurs algorithmes se servent d'un attribut qui doit garantir l'ordre strict faible des paires d'éléments d'une séquence. Pour l'attribut pr(X, Y):
Strict signifie l'pr(X, *X)*est false.
Faible signifie que X et Y a un classement équivalent si pr(X, Y) && !pr(Y, X) (X == Y n'a pas besoin d'être définies).
Classement signifie l'pr(X, *Y) &&*pr(Y, Z) implique pr(X, Z).
Certains de ces algorithmes utilisent implicitement l'attribut x <. D'autres attributs qui correspondent généralement à l'obligation de tri faible strict sont x >, less(X, Y), et greater(X, Y). Notez, toutefois, comme laquelle les attributs X < = O = X > et Y ne répondent pas à ce critère.
Une séquence d'éléments indiqués par les itérateurs dans la plage [First, Last) est une séquence ordonnée par l'opérateur**<** si, pour chaque N dans la plage de [0, Last - First) et toutes ) dans la plage (N, Last - First) l'attribut !(*(First + M) < *(First + N)) est true. Notez que les éléments sont triés dans l'ordre croissant.) La fonction de prédicat opérateur<, ou aucun remplacement pour est, ne doit pas modifier des opérandes. Il doit donner le même résultat d'bool chaque fois qu'il est évalué, il doit donner le même résultat si une copie de l'un des deux opérandes est substituée à l'opérande. De plus, il doit appliquer le caractère strict aux opérandes qu'il compare.
Une séquence d'éléments indiqués par les itérateurs dans la plage [First, Last) est un segment classés par opérateur< si, pour chaque N dans la plage de [1, Last - First) l'attribut !(*First< *(First + N)) est true. (Le premier élément est le plus grand.) La structure interne est sinon connue uniquement aux fonctions de modèle make_heap, pop_heap, et push_heap. Comme dans une séquence ordonnée, la fonction de prédicat opérateur<, ou aucun remplacement pour, il ne doit pas modifier des opérandes ; il doit appliquer le caractère strict aux opérandes qu'il compare. Il doit donner le même résultat d'bool chaque fois qu'il est évalué, il doit donner le même résultat si une copie de l'un des deux opérandes est substituée à l'opérande.
Les algorithmes de STL se trouvent dans les fichiers d'en-tête de <algorithm> et de <numeric>.