Traiter des Données avec la STL

16
Traiter des Données avec la STL David Saint-Mellion

description

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. - PowerPoint PPT Presentation

Transcript of Traiter des Données avec la STL

Page 1: Traiter des Données avec la STL

Traiter des Données avec la STL

David Saint-Mellion

Page 2: Traiter des Données avec la STL

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

Page 3: Traiter des Données avec la STL

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

Page 4: Traiter des Données avec la STL

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.

Page 5: Traiter des Données avec la STL

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

Page 6: Traiter des Données avec la STL

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’

Page 7: Traiter des Données avec la STL

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

Page 8: Traiter des Données avec la STL

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

Page 9: Traiter des Données avec la STL

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) );

Page 10: Traiter des Données avec la STL

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

Page 11: Traiter des Données avec la STL

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

Page 12: Traiter des Données avec la STL

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

Page 13: Traiter des Données avec la STL

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

Page 14: Traiter des Données avec la STL

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;

Page 15: Traiter des Données avec la STL

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);

Page 16: Traiter des Données avec la STL

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