La boite à outils stl : 70 fonctions de algorithm au service du programmeur c++

Description

L'idée de ce Tutorial : Comment utiliser une partie de la STL, pour traiter les données en simplifiant la vie du programmeur C++ comme utilisateur de choses compliquées qui peuvent être simples d'emploi et efficaces !
Il ne se préoccupe pas de la nature des objets manipulés : entiers, réels, chaînes de caractères ou des types " maisons " comme Piece, Personne?.
- Les conteneurs règlent l'organisation des objets.
- Les itérateurs (pointeurs objet) sont chargés de l'accès aux objets.
- Le traitement est effectué par les fonctions génériques de ''algorithm'';.

Dans le zip :
- Un document pdf de 20 pages sur les fonctions algorithm.
- Le projet, en Visual C++ 6, contenant 12 exemples d'utilisation des fonctions.

La plus part des fonctions de l'en-tête <algorithm> sont présentées. Elles sont regroupées en 5 familles de traitement :
- Les opérations générales de manipulation des données : copy(), fill(), generate(), swap_ranges(), ..
// Affiche la séquence d'un conteneur à l'écran
copy(destination.begin(),destination.end(),ecran);
// Remplit un vecteur avec une série arithmétique
generate_n(back_inserter(monVecteur),10,serieG2);

- Les opérations sur une séquence avec un critère : remove(), replace(), transform(), for_each(),
binary_search(), count(),
// Supprime les objets valant 11 et afficher le résultat
itrDerVtr=remove(data.begin(),data.end(),11);
copy(data.begin(), itrDerVtr, ecran);
// A chaque objet : source[n] <-- 10 + source[n]
transform(source.begin(),source.end(),source.begin(),ptr_fun(&ajouter));

- Les opérations de recherche de la position d'un objet particulier : min_element(), max_element(), find(), search(), adjacent_find(), lower_bound(), upper_bound(), equal_range(), ?
// Recherche la première occurrence d'un motif
itrTrouve=search(itrDebut,itrDernier,motif.begin(),motif.end());
// Recherche les positions possibles d'insertion de la valeur 11
intervalle=equal_range(source,source+10,11);

- Les opérations d'ordonnancement : sort(), reverse(), random_shuffle(), ...
// Trie par ordre croissant pour obtenir les 4 premiers objets
partial_sort(data.begin(),data.begin()+4,data.end());

- Les opérations ensemblistes sur 2 séquences : set_intersection() ,merge(),set_union (), set_difference(), partition(), ?
// Effectue l'union d'un vecteur et d'une liste
set_union(vec.begin(),vec.end(),lte.begin(),lte.end(),dest.begin());

Source / Exemple :


// Un des exemples du zip : Compter des objets dans un conteneur deque
#include <iostream>
#include <algorithm>
#include <functional> 	// pour ptr_fun
#include <deque>
using namespace std;

bool valPair(int val){	// Teste si la valeur est paire
 return ((val&1)==0);
}
// Data source
  int sourceData[10] = {1,81,7,32,14,53,16,7,68,91};

int main(void){
 deque<int> source(10);	// Définit une deque de 10 entiers
 int nbrePair=0;
 int nbreSept=0;
 copy(sourceData, sourceData+10,source.begin());
 // Compte le nombre d'objets pairs
 nbrePair=count_if(source.begin(),source.end(),ptr_fun(&valPair));
 // Compte le nombre d'objets supérieurs à 7
 nbreSept=count(source.begin(),source.end(), 7);
 cout<< nbrePair<<" Elements sont pairs"<< endl;
 cout<< nbreSept<<" Elements valent 7"<< endl;
 return 0;
}

Conclusion :


12 Exemples de programmes dans le zip présentent une des manières d'utiliser les fonctions.
Ils mettent en oeuvre 39 fonctions avec un privilège d'application au conteneur Vector.

Il y a certainement quelques bugs qui seront corrigés en fonction de vos remarques.

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.