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

Soyez le premier à donner votre avis sur cette source.

Vue 5 843 fois - Téléchargée 621 fois

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

Ajouter un commentaire

Commentaires

Galett
Messages postés
115
Date d'inscription
jeudi 7 février 2002
Statut
Membre
Dernière intervention
21 mai 2005
-
je n'ai pas encore d/l le pdf, mais très bonne initiative en tt K.
G0ss3Yn
Messages postés
65
Date d'inscription
dimanche 12 janvier 2003
Statut
Membre
Dernière intervention
5 novembre 2010
-
Cool, juste ce qu'il me faut :) ( 10/10 parce que ça tombe bien ;-p )

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.