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

La STL - imagecomputing.net

La STL - imagecomputing.net (qui implémentent l'opérateur +)

Plus en détail

STL

STL std::vector myVector; // ... fill the vector here // Iterating over vector elements std::vector::iterator it; for ( it = myVector.begin(); it != myVector.end(); ++it ) { int i = *it; std:...

Plus en détail