Algorithmes. STL (partie 10)




taille алгоритмы, trouver(), copie(), copy_if(), Déplacer(), swap_ranges(), remove_copy(), remove_copy_if(), fusionner(), set_intersection(), set_difference()conteneurs STL serait une belle fiction assez loin de l'utilisation pratique (comme il était dans les premières années d'existence de la STL), sinon le fait suivant: en raison de la seule global nature des algorithmes de base de récipient, d'intérêt dans la pratique, Il peut être mis en oeuvre sous une forme généralisée, applicable à tout les types de contenants. Algorithmes - est la plus grande et la partie la plus demandée de la bibliothèque. Fourni autant d'algorithmes, que, pour une description détaillée de chacun d'eux et pas assez livre en vrac. Ci-dessous, nous avons complètement conditionnellement Nous les divisons en groupes et appelons par son nom (et également pas tous), et seulement pour certains cas d'utilisation construire.

pour chaque() L'algorithme le plus couramment utilisé - est pour chaque(): la mise en œuvre d'actions pour les groupes d'éléments (peuvent tous) récipient. Ce qui suit montre quelques exemples de l'algorithme pour chaque() pour un tableau et le vecteur, De même, cet algorithme peut être utilisé avec tout контейнером STL:

taille алгоритмы, trouver(), compter(), count_if(), chercher(), recherche binaire(), min(), max(), minmax_element(), min_element(), max_element(), égal()

note: lignes 3 Elle montre le fonctionnement du nouveau (introduit la norme C ++ 11) conception pour( auto &X : …), qui a une affectation d'effet similaire et peuvent être appliqués à des réseaux et des contenants (in-opérateur vecteur de sortie de fonction dans le flux représenté une telle option). Cette construction, d'une manière générale, Il ne fait pas partie d'une bibliothèque ou d'algorithmes STL, mais il a le même effet, cet algorithme for_each(): appliquer uniformément à tous les éléments de la collection.

Cet exemple montre l'organisation fondamentale de la logique tous algorithmes: une plage spécifiée (pas nécessairement à la totalité de la collection), démarrage iterator limitée et à la fin (indique souvent les 2 premières options) appliquée fonctionne en alternance, foncteur, Ou prédicat (fonction, renvoie un résultat logixchesky, permettant la sélection d'un motif).

trouver() algorithme suivant la signification - il trouver(). Comment nom intuitif, la recherche d'un élément de la collection. S'il vous plaît noter, de nombreux conteneurs ont méthode trouver(), qui est un objet d'être appelé comme obj.find(…), tandis que algorithme Il sera appelé trouver( obj:iteator, ... ).

correctement, il est pas un, cet algorithme, mais tout un groupe de leur vaste, qui peuvent être combinés sur la base de, ce qu'ils sélectionné éléments d'une collection sur certains motifs, condition, prédicat: trouver(), find_if(), find_if_not(), find_first_of(), find_end(), adjacent_find(). Dans le même groupe, avec un certain étirement, peut être attribuée compter(), count_if(), chercher(), recherche binaire(), min(), max(), minmax_element(), min_element(), max_element(), égal() et al.

Un autre groupe conventionnel - algorithmes, en quelque sorte la collection "tasuyuschie", permuter des éléments dans les lieux, l'évolution des valeurs: remplir(), replace_copy(), sens inverse(), faire tourner(), rotate_copy(), battage(), random_shuffle(), transformer(), remplacer(), replace_if() et al.

Plus artiste - cet algorithme fonctionne avec 2 collections, àDessin et déplacement teneur (en outre, peut-être, entre les différents types de collections, par exemple, vecteur<> dans ensemble<>): copie(), copy_if(), Déplacer(), swap_ranges(), remove_copy(), remove_copy_if(), fusionner(), set_intersection(), set_difference() et al.

et, enfin, tout groupe particulier d'algorithmes est associé à une variété de tries les éléments de la collection: Trier(), stable_sort(), is_sorted(), is_sorted_until() et al. Ce groupe intéressant de nous réserver, pour une contrepartie distincte détaillée.

Avec une telle abondance des algorithmes mis en oeuvre et dont le nombre augmente avec la bibliothèque de temps, et, que la plupart d'entre eux ne pas vraiment décrit nulle part dans la littérature, la question se pose naturellement: comment comprendre toute cette diversité? Ces difficultés sont éliminées de sorte que:

  • Tous les objets de la STL (conteneurs, algorithmes) décrit dans les modèles de syntaxe (modèle). Par conséquent, leurs descriptions nécessairement Vous devriez être inclus dans le code compilé dans le cadre de leurs fichiers d'en-tête (fichiers d'en-tête).

  • Allez dans le répertoire par défaut </usr / include / c ++> et trouver les fichiers d'en-tête des fichiers de formulaire stl_algo * - Vous y trouverez toutes les fonctions prototypes algorithmes. en outre, il chaque prototype est précédé d'un examen approfondi commentaire, expliquer le but de l'algorithme, et explique les options d'achat.

  • Prenons l'exemple de code, en utilisant certaines BASICx algorithmes STL - beaucoup d'entre eux dans le réseau. Par analogie élémentaire et simplement reproduire le comportement tous les autres algorithmes.

note: Ceci est dû au fait, que la bibliothèque de classes de modèles sont définis en termes de modèle, sur les erreurs de syntaxe sont une compilation). mnogoslovnыmi, pour des dizaines de lignes de messages et b). terriblement vague pour trouver des bogues. Ceci est le revers d'un tel mécanisme puissant que le modèle, et cela devrait être prêt.

Comme je l'ai mentionné ci-dessus, études de cas supprimer un grand nombre de questions, et donc procéder au code … Maintenant, regardez attentivement pour les mains (STL est un ensemble d'algorithmes, que tous les commentaires – au-delà d'une présentation raisonnable du volume, mais ils travaillent tous comme une autre):

Voici les contenants utilisés pour carboniser (aussi compact, mais le travail le plus désagréable), sur lesquels exécuter une variété d'algorithmes pour presque tous les groupes désignés:

taille алгоритмы, trouver(), compter(), count_if(), chercher(), recherche binaire(), min(), max(), minmax_element(), min_element(), max_element(), égal()

Bulletin de nouvelles leçons sur la programmation:

date
page
Algorithmes. STL (partie 10)
évaluation
5
huile

Sur huile

une expérience pratique sur le développement de logiciels 40 ans. société de logiciels internationale Global Teacher Logic. IBM Developer Works auteur permanent des publications. éditeur scientifique de l'ordinateur littérature maison d'édition "Symbole-Plus", Saint-Pétersbourg.

2 réflexions sur "Algorithmes. STL (partie 10)

Laisser un commentaire

Placez le code dans les balises: <pre class="lang:c ++ décodage:true ">VOTRE CODE</pré>