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 conteneurcopy(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érentmake_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
Top Related