Cours n° 6 Standard Template Library I.

Slides:



Advertisements
Présentations similaires
Erratum C Surcharge For(int x=0; … 2.
Advertisements

Cours n° 1 Présentation du langage C++
Cours n° 2 Les entrées-sorties Biliothèque C++ (iostream) –
Cours n° 7 Standard Template Library II.
Masters IIGLI et IGLII – Programmation générique et conception objet – – Claude Montacié 1 Cours n° 5 Structures de données abstraites.
Au programme du jour …. Un peu plus de structures de données
Cours n° 9 Conception et Programmation à Objets
Cours n° 8 Conception et Programmation à Objets
1 UMLV 1. Introduction 2. Hachage ouvert 3. Hachage fermé 4. Implémentation des fonctions Méthodes de hachage.
La programmation générique avec la STL EIUMLV - Informatique et Réseaux 99 Benoît ROMAND.
Approfondissement du langage
1 ARCHITECTURE DACCÈS la méthode générale modèle de données définitions module daccès / modules métiers construction des modèles les modules daccès, les.
Principes de programmation (suite)
Classes locales classes définies à l'intérieur d'un bloc de code,
Structures collectives en Java
Structures de données et algorithmes – TP2
Structures de données et algorithmes – C5 Maria-Iuliana Dascalu, PhD
II. Chaînage, SDD séquentielles
Leçon 6 : Structures de données dynamiques IUP 2 Génie Informatique Méthode et Outils pour la Programmation Françoise Greffier.
Bibliothèque standard du C++
IFT313 Introduction aux langages formels
II. Chaînage, SDD séquentielles
Les tris.
Chapitre 21 Collections Partie I Introduction Une collection : est un objet qui regroupe multiple éléments dans une unité. Une collection est.
Standard Template Library (STL)
Structures de données IFT-2000
Master 1 SIGLIS Java Lecteur Stéphane Tallard Chapitre 5 – Héritage, Interfaces et Listes génériques.
Traiter des Données avec la STL
HistoriqueHistorique Langage C++, parution du livre Bjarne Stroustrup Normalisation ANSI.
Programmation Initiation Aux Langages C et C++ (3) Bruno Permanne 2006.
Structures de données IFT Abder Alikacem La classe vector Édition Septembre 2009 Département dinformatique et de génie logiciel.
Structures de données IFT Abder Alikacem La classe string Département dinformatique et de génie logiciel Édition Septembre 2009 Département dinformatique.
Structures de données IFT-2000 Abder Alikacem La librairie STL du C++ Département dinformatique et de génie logiciel Édition Septembre 2009.
Structures de données IFT-2000
Structures de données IFT-2000
Structures de données IFT-2000 Abder Alikacem Standard Template library Édition Septembre 2009 Département dinformatique et de génie logiciel.
Programme de baccalauréat en informatique Programmation Orientée Objets IFT Thierry EUDE Module 7 : Classes et fonctions paramétrables Département.
Conteneurs STL.
Rappels Java.
Principes de programmation (suite)
Présentation Structures de Données et TDA
Types de données abstrait et mécanismes d'encapsulation
COURS DE PROGRAMMATION ORIENTEE OBJET :
Standard Template Library

Structures de données IFT-2000
Masters IIGLI et IGLII – Programmation générique et conception objet – – Claude Montacié 1 Cours n° 4 Polymorphisme II.
Structures de données IFT-2000 Abder Alikacem Retour sur les listes ordonnées Département dinformatique et de génie logiciel Édition Septembre 2009.
Structures de données IFT-2000
Structures de données IFT-2000
Masters IIGLI et IGLII – Programmation générique et conception objet – – Claude Montacié 1 Cours n° 3 Polymorphisme I.
Le langage C Structures de données
2.1 - Historique Chapitre 2 : Introduction au langage C++
LES PILES ET FILES.
La notion de type revisitée en POO
Templates, Containers et STL Structures de données de base tableau, liste chaînée file, pile, arbres, hashtable collection, ensemble 2 caractéristiques.
Cours n° 1 Présentation du langage C++
HistoriqueHistorique Langage C++, parution du livre Bjarne Stroustrup Normalisation ANSI.
II. Chaînage, SDD séquentielles
ETNA – 1ème année Guillaume Belmas –
Conception de Programmes - IUT de Paris - 1ère année Conception de Programmes Objectifs et organisation du cours Introduction à la P.O.O. et au.
Liste Une liste est une séquence d’éléments. Concept important: Chaque élément possède une position dans la liste. Notation: De quelles opérations a-t-on.
Conception de Programmes - IUT de Paris - 1ère année Conception de Programmes Objectifs et organisation du cours Introduction à la P.O.O.
Templates & STL Ou comment ne pas réinventer la roue à chaque fois.
1 UMLV  FICHIERS Mémoire de masse découpée en blocs Fichier :liste chaînée de blocs, ou arbre de blocs (répertoires - fichiers)‏ Bloc d’éléments Bloc.
Structures de données IFT-2000 Abder Alikacem La STL du C++. La récursivité Semaine 9 Département d’informatique et de génie logiciel Édition Septembre.
1 Listes des méthodes de la classe string, et exemples.
Structures de données IFT-2000 Abder Alikacem Standard Template library Semaine 5 Édition Septembre 2009 Département d’informatique et de génie logiciel.
 Chaînage et LSC : motivation et principe Manipuler la LSC : exemples Variantes : LDC, liste circulaire, … Etude de cas : réalisation d’un buffer clavier.
CSI2510 Structures des Données et Algorithmes
Transcription de la présentation:

Cours n° 6 Standard Template Library I

Conteneurs séquentiels Sommaire Conteneurs séquentiels 1.1 Séquences élémentaires 1.2 Adaptateurs de conteneurs Itérateurs

Standard Template Library (STL) INTRODUCTION Généralités Standard Template Library (STL) Conception suivant les mécanismes de la généricité des langages impératifs, Normalisation en 1995 (ANSI Draft), 1997 (STL 3.0), 2003 (ISO/IEC 14882-2003) Source et documentation disponible sur www.sgi.com/tech/stl/ Ensemble normalisé Patrons de classes des structures de données usuelles, Patrons de d’algorithmes classiques optimisées Abstraction de l'implémentation Structures de données et algorithmes doivent fonctionner pour tout type d'élément type intégré (au langage) type utilisateur (défini par le programmeur utilisateur) Efficacité vitesse d'exécution

INTRODUCTION Bibliographie D.-R. Musser, G.-D. Derge, A. Sainin, STL Tutorial and Reference Guide, Addison Wesley, 2001. S. Meyers, Effective STL: 50 Specific Ways to Improve Your Use of the Standard Template Library, Addison-Wesley Professional, 2001. A. B Fontaine, La bibliothèque standard STL du C++, Interéditions, 1997. Sites www.cppreference.com/cppstl.html www.chez.com/brunogarcia/pdf/stl.pdf www.sgi.com/tech/stl/table_of_contents.html

Conteneurs (container) INTRODUCTION Composants de STL Conteneurs (container) Implémentation des structures de données les plus courantes avec leur allocation/désallocation mémoire automatique Itérateurs (iterator) Principes d'accès/balayage des éléments des conteneurs Algorithmes (algorithm) Implémentation d'algorithmes génériques associés container iterator algorithm

Conteneurs de séquence Conteneurs associatifs Introduction Conteneurs Conteneurs de séquence Conteneurs associatifs Séquences élémentaires Adaptateurs de séquence set map vector deque list multiset multimap stack queue priority_queue

Blocs contigus d'objets (vector) ou non contigus (deque, list) 1.1 SEQUENCES ELEMENTAIRES Principes de fonctionnement Blocs contigus d'objets (vector) ou non contigus (deque, list) Insertion possible en tout point de la séquence, Performance fonction du type de séquence et du point d'insertion. Accès direct Insertion optimisée en fin vector deque Accès direct Insertion optimisée en début ou en fin (Double End QUEue) Accès séquentiel Insertion et retrait optimisée en tout point list

Patrons communs de fonctions membres (1) 1.1 SEQUENCES ELEMENTAIRES Patrons communs de fonctions membres (1) bool empty(); true si le conteneur est vide size_type size() const; Nombre d'éléments du conteneur size_type max_size() const; Contenance maximale du conteneur void resize(size_type, T c =T()); Redimensionnement du conteneur T& front(); Référence sur le premier élément T& back(); Référence sur le dernier élément

Patrons communs de fonctions membres (2) 1.1 SEQUENCES ELEMENTAIRES Patrons communs de fonctions membres (2) void push_back(const T& ); Ajout (recopie) de l'élément en fin iterator insert(iterator, const T& = T()); Insertion d’un élément à l'emplacement spécifié par l'itérateur void insert(iterator position, iterator debut, iterator, fin) Insertion à la position spécifiée les éléments de [debut fin[ void swap(sequence <T>&back() Echange des éléments de this avec ceux du conteneur argument void pop_back(); Suppression de l’élément en fin de séquence void erase(iterator i); Suppression de l'élément pointé par l'itérateur i void erase(iterator debut, iterator fin); Supprime des éléments de [debut fin[

vector <T> v; Déclaration d’un vecteur v d’éléments de type T 1.1 SEQUENCES ELEMENTAIRES - CONTENEUR VECTOR Instanciation, propriétés, et fonctions spécifiques vector <T> v; Déclaration d’un vecteur v d’éléments de type T vector <T> v(n); Déclaration d’un vecteur v de n d’éléments de type T Extension de la structure classique de tableau (liste) Création et variation de la taille au cours de l’exécution Fonctions d’insertion et de suppression non optimisées (sauf en fin de liste) size-type capacity() const; Capacité actuelle du conteneur void reserve(size_type); Ajout de capacité T& operator [](size_type); et T& at(size_type); Accès direct

testVector.cpp Exemple 1.1 SEQUENCES ELEMENTAIRES - CONTENEUR VECTOR #include <iostream> #include <vector> using namespace std; int main() { int tabEnt[] = {10, 15, 23, 67, 43, 98, 34, 77}; vector <int> vi; for (int i = 0; i < sizeof(tabEnt) / sizeof(int);i++) vi.push_back(tabEnt[i]); cout << vi.size() << " "; for (int i = 0; i < vi.size();i++) cout << vi[i] << " "; } 8 10 15 23 67 43 98 34 77

deque <T> d; Déclaration d’une deque d d’éléments de type T 1.1 SEQUENCES ELEMENTAIRES - CONTENEUR DEQUE Instanciation, propriétés, et fonctions spécifiques deque <T> d; Déclaration d’une deque d d’éléments de type T deque <T> d(n); Déclaration d’une deque d n d’éléments de type T Fonctionnalités voisines de celles du conteneur vector + Insertion et Suppression en début de séquence plus rapide - Accès direct plus lent void push_front(const T&) const; Insertion d’un élément en début de séquence void pop_front(); Suppression en début de séquence T& operator [](size_type); et T& at(size_type); Accès direct

testDeque.cpp Exemple 1.1 SEQUENCES ELEMENTAIRES - CONTENEUR DEQUE #include <iostream> #include <deque> #include "../tp03/Date.h" using namespace std; int main() { deque <Date> di; Date today, dfin; cin >> today; cin >> dfin; do { ++today; di.push_front(today); } while (today < dfin); cout << di.size() << " "; for (int i = 0; i < di.size();i++) cout << di[i] << " "; }

list <T> l; Déclaration d’une liste l d’éléments de type T 1.1 SEQUENCES ELEMENTAIRES - CONTENEUR LIST Instanciation, propriétés, et fonctions spécifiques list <T> l; Déclaration d’une liste l d’éléments de type T list <T> l(n); Déclaration d’une liste l de n d’éléments de type T Spécialisation de la structure classique de liste + Fonctions rapides d’insertion et de suppression - Accès séquentiel, fonctions rapides (tri, concaténation, …) void push_front(const T&) const; Insertion d’un élément en début de séquence void pop_front(); Suppression en début de séquence void remove(const& T valeur); Suppression des éléments égaux à valeur void remove_if(Predicate pred); Suppression des éléments vérifiant pred void sort(); Tri des éléments selon l'opérateur < void reverse(); Ordre inverse selon l'opérateur < void merge(list<T> & x) Fusion de la liste triée avec une autre liste x void unique(); Suppression sur une liste triée des éléments en double ….

testList.cpp Exemple 1.1 SEQUENCES ELEMENTAIRES - CONTENEUR LIST int main() { list <Date> ld; Date fin, d; cin >> d; do {ld.insert(ld.end(), d); cin >> d; } while (d != fin); cout << "liste de " << ld.size() << " éléments" << endl; ld.sort(); cout << "entre " << ld.front(); ld.reverse(); cout << "et " << ld.front() << endl; } liste de 3 éléments entre 19 6 2006 et 21 6 2006

Conteneurs implémentés à partir de séquences élémentaires stack 1.2 ADAPTATEUR DES SEQUENCES Introduction Conteneurs implémentés à partir de séquences élémentaires stack Structure de données de pile - Last In First Out (LIFO) Insertions et retraits sur le haut de la pile queue Structure de données de file - First In First Out (FIFO) Insertions en fin et retraits en début Pas d’autres accès (direct ou séquentiel)

Implémentation d’une structure abstraite de pile Fonctions membres 1.2 ADAPTATEUR DES SEQUENCES – ADAPTATEUR STACK Instanciation, propriétés, et fonctions membres stack<T, vector<T> > p; Déclaration d’une pile d’éléments de type T Implémentation d’une structure abstraite de pile Fonctions membres bool empty(); true si la pile est vide size_type size() const; Taille de la pile T& top() : Lecture du sommet de la pile void push(const T& ); Empiler l'élément T& pop()(const T& ); Dépiler un élément

testStack.cpp Exemple 1.2 ADAPTATEUR DES SEQUENCES – ADAPTATEUR STACK #include <vector> #include <stack> #include "../Cours 03/Animal.h" int main(){ stack <Animal, vector<Animal> > pa; pa.push(*(new Animal("lion", 4))); pa.push(*(new Animal("kangourou", 2))); pa.push(*(new Animal("araignée", 6))); while (pa.empty() == false) {pa.top().presente(); pa.pop(); } } je suis un représentant de l'espèce des araignée et j'ai 6 pattes je suis un représentant de l'espèce des kangourou et j'ai 2 pattes je suis un représentant de l'espèce des lion et j'ai 4 pattes

Implémentation d’une structure abstraite de file Fonctions membres 1.2 ADAPTATEUR DES SEQUENCES – ADAPTATEUR QUEUE Instanciation, propriétés, et fonctions membres queue<T, list<T> > f; Déclaration d’une file d’éléments de type T Implémentation d’une structure abstraite de file Fonctions membres bool empty(); true si la file est vide size_type size() const; Taille de la file T& front() : Lecture de la tête de la file void push(const T& ); Ajout de l'élément en queue T& pop()(const T& ); Suppression d’un élément en tête

testQueue.cpp Exemple 1.2 ADAPTATEUR DES SEQUENCES – ADAPTATEUR QUEUE #include <iostream> #include <list> #include <queue> using namespace std; int main() { char tabChr[] = {'p', 'a', 'r', 'i', 's'}; queue <char, list<char> > fa; for (int i = 0; i < sizeof(tabChr) / sizeof(char);i++) fa.push(tabChr[i]); while (fa.empty() == false) { cout << fa.front() << " "; fa.pop(); } } p a r i s

Variable qui repère la position d'un élément dans un conteneur 2. ITERATEURS Rôles Variable qui repère la position d'un élément dans un conteneur Utilisés pour accéder/balayer les éléments d'un conteneur Généralisation et amélioration de la sûreté des pointeurs Quelque soit la classe conteneur : 2 méthodes membres Début de la collection (position du premier élément) Itérateur renvoyé par la méthode membre begin() Fin de la collection (position de l'élément "juste après le dernier") Itérateur renvoyé par la méthode membre end() Exemple : vector <int> V; V.begin() V.end() 12 3 25 7 39 27

Déplacement (En avant, en arrière ou aléatoire) 2. ITERATEURS Opérateurs associés Déréférencement Accès au conteneur dont l'itérateur pointe l'élément *It Déplacement (En avant, en arrière ou aléatoire) Exemples : ++It; It++; // balayage séquentiel avant --It; It--; // balayage séquentiel arrière It+=5; It-=3; // accès direct A chaque conteneur son type d'iterateur Itérateur à accès aléatoire (vector et deque) Itérateur bidirectionnel (list, map, set) Types membres des classes conteneurs const_iterator (version constante) iterator (version non constante) Exemples : Déclaration d'un itérateur Ivc sur un vecteur de Complexe vector<Complexe>::iterator Ivc;

BidirectionalIterator RandomAccessIterator 2. ITERATEURS Hiérarchie InputIterator *, i++, ++i Constructeur copie Opérateur d'assignation ==, != OutputIterator Itérateur d'entrée Lecture Déplacement avant Itérateur de sortie Ecriture Déplacement avant Itérateur unidirectionnel Lecture et écriture Déplacement avant ForwardIterator Itérateur bidirectionnel Lecture et écriture Déplacement avant/arrière i--, --i BidirectionalIterator <, <=, >, >= +, +=, -, -= [] Itérateur accès aléatoire Lecture et écriture Accès aléatoire RandomAccessIterator

testIterateur.cpp Balayage/accès par itérateur 2. ITERATEURS typedef list<Date> listDate; typedef listDate::iterator itLDate; listDate L; itLDate it; // 1ère version for (it = L.begin(); it != L.end(); it++) cout<< *it << " "; cout<<endl; // 2ème version it = L.end(); do { --it; cout << *it << " "; } while (it != L.begin()); return 0; }