Le Traitement des données avec la STL (pdf - David Saint
Transcription
Le Traitement des données avec la STL (pdf - David Saint
Langage C++ Introduction à la STL 10/02/03 Traiter des données avec la STL Les composants de la STL ont été écrits par des spécialistes, il y a une forte probabilité qu’ils soient plus efficaces et qu’un composant « maison ». La librairie STL étant standard sont emploi rend les programmes portables. La présentation se limite aux conteneurs avec un privilège au vector, les fonctions algorithmiques, les itérateurs et un nuage de foncteur. L’idée qui a présidé à ce choix étant : 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 simple d’emploi et efficaces ! L’idée générale de la STL : On ne se préoccupe pas de la nature de ce que l’on manipule : des entiers, des réels, des chaînes de caractères ou des types « maisons » comme Piece, Personne…. • Les conteneurs règlent l’organisation des objets. • Les itérateurs sont chargés de l’accès aux objets. • Le traitement est effectué par les fonctions génériques de <algorithm>. Le programmeur devra écrire pour quel type il veut un conteneur ou un itérateur. Lorsqu’il utilise une fonction générique de <algorithm>, elle s’applique à une séquence d’objets définie par des itérateurs. Si le programmeur : • Définit un conteneur d’entiers, lui applique la fonction sort(), il récupère le conteneur trié. • S’il définit un conteneur contenant des images, lui applique la même fonction sort(), il obtiendra le conteneur trié. Dans ce cas, il devra définir l’opérateur d’infériorité pour dire : «Qu’est ce qu’une image inférieure». 1 LES CONTENEURS Les conteneurs sont des objets capables de stocker des objets du même type. Ils organisent l’ensemble d'objets en une séquence puis de la parcourir. Il y a 2 familles de conteneurs : • de Séquence : vector, deque et list • Associatifs : set, multiset, map et les multimap Le vector est le conteneur de remplacement du tableau. Il peut grossir pendant l’exécution. Il y a 2 types d’implémentation en mémoire : • Une zone mémoire continue est allouée : vector , deque, • La liste : les objets sont dispersés dans la mémoire et relié entre eux par un couple de pointeurs ‘Précédent ‘ ‘Suivant’. Pour un nombre d’objets identiques une liste prend souvent plus de place en mémoire. Tous les conteneurs disposent de 3 fonctions : • begin() renvoie l’itérateur sur le 1er objet • end() renvoie l’itérateur sur l’itérateur juste après le dernier objet • empty() renvoie le booléen true si le conteneur est vide 2 LES ITERATEURS <ITERATOR> Un itérateur est un objet permettant l’accès aux objets d'un conteneur. Il peut être vu comme une variable de position. Il supporte l’opération d’incrémentation qui permet de «passer» à l’objet référencé suivant. Il y a différents types d’itérateurs. L’itérateurs de type «bidirectional_iterator» s’applique aux conteneurs : list, set, multiset, map, multimap. L’itérateurs de type «random_acces_iterator» est le plus puissant. Il s’applique aux conteneurs de type : vector, deque. Les itérateurs adaptateurs permettent de : • Lier un flux de données à un conteneur, • Réaliser les opérations d’insertion d’un objet dans un conteneur. 3 LES FONCTIONS <ALGORITHM> C’est un jeu de 70 fonctions traitant les algorithmes les plus connus : la création, la copie, la suppression, le remplacement, la recherche avec un critère, le tri. Elles peuvent : • S’appliquent à tous les objets d’un conteneur ou seulement une partie. • Opérer sur 2 conteneurs de nature différents à condition qu’ils contiennent des objets de même type. En général ces fonctions : ItrPrem itrDer • Reçoivent 2 itérateurs en paramètres 1 2 3 4 5 6 7 8 9 définissant une séquence dans un conteneur source. • Parcourent la séquence pour effectuer le traitement en fonction de l’algorithme choisi. • Sont génériques, donc pas attachées à un type d’objet. Il pourra être nécessaire pour des types d’objets de définir les opérateurs de copie, d’égalité et d’infériorité. David Saint-Mellion page 1/3 Langage C++ Introduction à la STL 10/02/03 4 LES FONCTEURS ABSTRACTION DES FONCTIONS <FUNCTIONAL> Un « Foncteur » est un objet dont la classe définit l'opérateur « () ». Les foncteurs qui prennent : • un paramètre sont dites foncteurs «unaires», • deux paramètres sont dits foncteurs «binaires». Une fonction «Prédicat » est un foncteur qui renvoie un booléen. Une majorité de versions des fonctions <algorithm> utilisent des foncteurs unaires, binaires ou des prédicats La base d’un Foncteur unaire : template <class Arg, class Result> struct unary_function { typedef Arg argument_type; typedef Result result_type; }; // Pour une Predicat, class Result est un booléen Le foncteur Adaptateur de fonctions ptr_fun(maFonction)convertit une fonction « maison » en foncteur. Des foncteurs de base sont prédéfinis dans l'en-tête <functional> comme : negate() inverse la valeur, plus() additionner, … 5 LES PAIRES <UTILITY> Une paire dispose d’un constructeur et de données membres first et second. Pair les deux données sont du même type : pair< string, string> personne; personne.first = Durant; personne.second = Jean; Make_paire dispose de 2 données de type différent. make_pair<string, int> personne; cout<<"Nom : "<<personne.first<<" Age :"<<personne.second<<endl; 6 EXEMPLE «TRIER UN FICHIER» 1 2 3 4 ifstream fichierCoteR; ofstream fichierCoteW; vector<float> vecCote; ostream_iterator<float> fichierW(fichierCoteW, "\n"); 5 6 fichierCoteR.open("piece.dat"); copy(istream_iterator<float>(fichierCoteR), istream_iterator<float>(), back_inserter(vecCote); sort(vecCote.begin(), vecCote.end()); fichierCoteR.close(); fichierCoteW.open("piece_t.dat"); copy(vecCote.begin(), vecCote.end(), fichierW); 7 8 9 10 7 POUR EN SAVOIR PLUS • • • Les itérateurs Le conteneur vector La librairie algorithm http://saintmellion.free.fr/cours/C++/stl/iterateur.pdf http://saintmellion.free.fr/cours/C++/stl/vector.pdf http://saintmellion.free.fr/cours/C++/stl/algorithm.pdf Tutoriaux sur la STL • • http://w3imagis.imag.fr/Membres/Xavier.Decoret/STL_TUTORIAL/index.html http://www.developpez.biz/download/stl.pdf Exemples sur www. ccpfrance.com • • • • • Trier un tableau Rechercher le plus Grand ou le Petit Trier un fichier La classe map (exemple d’un agenda) La classe list David Saint-Mellion http://www.cppfrance.com/article.aspx?Val=1288 http://www.cppfrance.com/article.aspx?Val=1310 http://www.cppfrance.com/article.aspx?Val=1370 http://www.cppfrance.com/article.aspx?Val=420 http://www.cppfrance.com/article.aspx?Val=418 page 2/3 Langage C++ David Saint-Mellion Introduction à la STL page 3/3 10/02/03
Documents pareils
STL
std::vector