160 likes | 287 Views
Traiter des Données avec la STL. David Saint-Mellion. Avantage. Les composants de la STL ont été écrits par des spécialistes Ils sont plus efficaces et qu’un composant “Maison” La librairie STL est standard , son emploi rend les programmes portables. L’idée Générale de la STL.
E N D
Traiter des Données avec la STL David Saint-Mellion
Avantage Les composants de la STL ont été écrits par des spécialistes Ils sont plus efficaces et qu’un composant “Maison” La librairie STL est standard, son emploi rend les programmes portables
L’idée Générale de la STL On ne se préoccupe pas de la nature de ce que l’on manipule • Conteneurs : chargés de Organisation des données • Itérateurs : chargés de l ’Accès aux objets • Fonctions de <algoritm>: chargées du Traitement
L’idée Générale de la STL Si le programmeur applique la fonction sort() sur un conteneur : • d’Entiers, il récupère le conteneur trié • d’Images, il obtiendra le conteneur trié. Il devra définir l’opérateur d’infériorité pour dire : “Qu’est ce qu’une image inférieure ” La fonction s ’applique sur la suite d ’objets et non sur leur nature.
Les Conteneurs Des objets stockant des objets du même type Il organisent l’ensemble des objets en une séquence pour la parcourir 2 familles de conteneurs : • de séquence : vector, deque et list • Associatifs : set, multiset, map et les multimap
Les Conteneurs Deux implémentations en mémoire • Une zone mémoire continue : 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’
Les Conteneurs Tous les conteneurs disposent de 3 fonctions : • begin() renvoie l’itérateur sur le 1er objet • end() renvoie l’itérateur juste après le dernier objet • empty() renvoie true si le conteneur est vide Le Vector remplace le tableau. Il peut grossir pendant l’exécution
Les Itérateurs <Iterator> Un objet permettant d'accéder aux objets d'un conteneur Supporte l’opération d’incrémentation pour “ passer ” à l’objet suivant Différents itérateurs • “ Bidirectional_iterator ” : list, set, multiset, map, multimap • “ Random_acces_iterator” : vector, deque
Les Itérateurs Adaptateurs Lier un flux de données à un conteneur, ostream_iterator<int> ecran(cout," "); copy(vec1.begin(),vec1.end(),ecran); Réaliser les opérations d’insertion dans un conteneur copy(istream_iterator<float>(fichierCoteR), istream_iterator<float>(), back_inserter(vecCote) );
Les Fonctions <Algorithm> C’est un jeu de 70 fonctions traitant les algorithmes les plus connus : • La copie, • La suppression, • Le remplacement, • La transformation • La recherche avec un critère, • Le tri
Les Fonctions <Algorithm> S’appliquent à tous les objets ou une partie de 1 ou 2 conteneurs Reçoivent 2 itérateurs définissant la séquence source Parcourent la séquence pour traiter avec la fonction <algorithm> choisie
Les Foncteurs <Functional> Un “foncteur ” est un objet définissant l'opérateur “( )”. Les foncteurs prenant : • 1 paramètre sont dites “unaires ”, • 2 paramètres sont dits “binaires ” Une fonction “prédicat” est un foncteur qui renvoie un booléen Les fonctions <algoritm> utilisent des foncteurs unaires, binaires ou des prédicats
Les Foncteurs <Functional> Définition d’un foncteur unaire Template<class arg,class result> Struct unary_function { Typedef arg argument_type; Typedef result result_type; }; // Pour une predicat, Result est un bool Le foncteur adaptateur de fonction ptr_fun(--) convertit une fonction “ maison ” en foncteur
Les Paires <Utility> Une «paire» est un couple de 2 données. Elle dispose d’un constructeur et de 2 attributs : first et second • Pair 2 données du même type : pair<string, string> personne; personne.fisrt = Durant ; • Make_paire : 2 données de type différent make_pair<string, int> personne; cout<<"Age "<<personne.second;
Exemple « Trier un Fichier » 1 ifstream fichierCoteR; 2 ofstream fichierCoteW; 3 vector<float> vecCote; 4 ostream_iterator<float> fichierW(fichierCoteW, "\n"); 5 fichierCoteR.open("piece.dat"); 6 copy(istream_iterator<float>(fichierCoteR), istream_iterator<float>(), back_inserter(vecCote); 7 sort(vecCote.begin(), vecCote.end()); 8 fichierCoteR.close(); 9 fichierCoteW.open("piece_t.dat"); 10 copy(vecCote.begin(), vecCote.end(), fichierW);
Pour en savoir plus Itérateur, vector, 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 Tutorial sur la STL • http://w3imagis.imag.fr/Membres/Xavier.Decoret/STL_TUTORIAL/index.html • http://www.developpez.biz/download/stl.pdf