Cours n° 7 Standard Template Library II.

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) –
Masters IIGLI et IGLII – Programmation générique et conception objet – – Claude Montacié 1 Cours n° 5 Structures de données abstraites.
Cours n° 6 Standard Template Library I.
C++ 6ème cours Patrick Reuter maître de conférences
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
La programmation générique avec la STL EIUMLV - Informatique et Réseaux 99 Benoît ROMAND.
Approfondissement du langage
(Classes prédéfinies – API Java)
C.
JAV - TD 6 Structures de données JAVA
IPA – Catherine Faron Zucke et Anne Marie Deryr. suite ordonnée d'éléments de taille variable ArrayList liste; liste = new ArrayList (); Ne peuvent contenir.
OCaml - Les listes L3 MI.
Structures de données et algorithmes – C5 Maria-Iuliana Dascalu, PhD
OCaml – Les arbres L3 MI.
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++
Introduction au paradigme objet Concepts importants surcharge (overload) redéfinition (override) Définition d’une classe Définition des attributs.
Les Classes les structures en C (struct) regroupent des variables : structuration de l'analyse mais problèmes de cohérence problèmes de sécurité d'accès.
Standard Template Library (STL)
Structures de données IFT-2000
Leçon 2 : Surcharge des opérateurs IUP 2 Génie Informatique Méthode et Outils pour la Programmation Françoise Greffier Université de Franche-Comté.
Traiter des Données avec la STL
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
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 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.
GPA789 Analyse et conception orientées objet 1 Professeur: Tony Wong, Ph.D., ing. Chapitre 6 Correspondance UML et C++
1 PROTOTYPE PGC++ Vecteur_3D DÉFINITION. 2 class Vecteur_3D { private : float vx, vy, vz, vw; // Représentation en coordonnées homogènes. public : Vecteur_3D();
Contrôle de types Les types en programmation Expressions de types Un contrôleur de types Equivalence de types Conversions de types Généricité.
Piles Premier arrivé, dernier servi: LIFO (Last In, First Out) Liste à usage restreint: Enlève et insère un élément seulement à un bout de la liste. Notation:
Types de données abstrait et mécanismes d'encapsulation
1 Fonction : surcharge de sélection La surcharge de sélection consiste à implanter plusieurs méthodes de même nom dans une même classe à condition que.
Standard Template Library
Héritage Lhéritage permet de spécialiser une classe en définissant une relation de type « est une sorte de ». #include comptebancaire.h class CompteEpargne.
C++ : fonctions et opérateurs
Structures de données IFT-2000
Structures de données IFT-10541
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.
2.1 - Historique Chapitre 2 : Introduction au langage C++
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.
Méthodes de tri.
Cours n° 1 Présentation du langage C++
Cours C++ Fonctions Surcharge d’opérateurs Passage d’arguments
ETNA – 1ème année Guillaume Belmas –
Les classes et les objets Les données finales class A { … private final int n = 20 ; // la valeur de n est définie dans sa déclaration … } class A { public.
Les opérateurs L’amitié Les opérateurs Introduction
Les surcharges d'opérateurs
Conception de Programmes - IUT de Paris - 1ère année – Cours 8 – Les entrées/sorties Comment fonctionnent les opérateurs > pour les types élémentaires.
Conception de Programmes - IUT de Paris - 1ère année – Cours 6 - Les opérateurs L’amitié Les opérateurs –Introduction –Surcharge par fonction.
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.
1 Listes des méthodes de la classe string, et exemples.
Structures de données IFT-2000 Abder Alikacem Laboratoire #1 Département d’informatique et de génie logiciel Édition Septembre 2009.
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.
Files de priorité (Priority Queue)
Conception de Programmes - IUT de Paris - 1ère année Les classes Introduction Déclaration d’une classe Utilisation d’une classe Définition des.
Transcription de la présentation:

Cours n° 7 Standard Template Library II

Conteneurs associatifs Sommaire Relation d’ordre 1.1 Bibliothèque de foncteur 1.2 File à priorité Conteneurs associatifs 2.1 Ensemble (set et multiset) 2.2 Clé et valeur (map et multimap)

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

Relation binaire associée à un ensemble d’Items 1 RELATION D’ORDRE Définition Relation binaire associée à un ensemble d’Items Réflexive (tout Item est en relation avec lui-même) Antisymétrique (pas de relation mutuelle entre Items distincts) Transitive (deux Items sont mis en relation s’ils sont en relation avec un troisième) Exemples et contre-exemples ordre lexicographe est une relation d’ordre sur les listes de caractères, « est antérieur ou égale à » est une relation d’ordre sur les données temporelles, « est plus petit que » n’est pas une relation d’ordre (non réflexive)  Ensemble ordonné Ensemble d’Items muni d’une relation d’ordre Ordre total Relation entre tous les couples d’Items

Redéfinition des opérateurs arithmétiques 1.1 BIBLIOTHEQUE DE FONCTEURS Foncteurs arithmétiques et logiques Redéfinition des opérateurs arithmétiques plus<T> retourne (arg1 + arg2) minus<T> retourne (arg1 - arg2) multiplies<T> retourne (arg1 * arg2) divides<T> retourne (arg1 / arg2) modulus<T> retourne (-arg1) negate<T> Redéfinition des opérateurs logiques logical_and<T> retourne (arg1 && arg2) logical_or <T> retourne (arg1 || arg2) logical_not<T> retourne (!arg1) Paramètres des algorithmes STL

testFoncteurSTL.cpp Application du foncteur « plus » 1.1 BIBLIOTHEQUE DE FONCTEURS Application du foncteur « plus » template <class T, class F> T applique(T i, T j, F foncteur) { // Applique l'opérateur fonctionnel au foncteur // avec comme arguments les deux premiers paramètres : return foncteur(i, j); } int main(void) { Complexe Clx1(0.2, -0.54) , Clx2 (0.4, 0.92); // Utilisation du foncteur "plus" pour faire faire une addition // à la fonction "applique" : cout << applique(Clx1, Clx2, plus <Complexe>()) << endl; return 0;

Redéfinition de l’opérateur choisi 1.1 BIBLIOTHEQUE DE FONCTEURS Foncteurs de comparaison Définition de la relation d’ordre à partir d’un prédicat binaire de comparaison Compare : Objet de type fonction binaire générique (6 possibilité en C++) equal_to <T> retourne (arg1 == arg2) not_equal_to <T> retourne (arg1 != arg2) greater <T> retourne (arg1 > arg2) less <T> retourne (arg1 < arg2) greater_equal <T> retourne (arg1 >= arg2) less_equal <T> retourne (arg1 <= arg2) Redéfinition de l’opérateur choisi

Patient.h Redéfinition de l’opérateur « >= » (1/2) 1.1 BIBLIOTHEQUE DE FONCTEURS Redéfinition de l’opérateur « >= » (1/2) #include <iostream>// déclaration des flots standard #include <string> using namespace std; class Patient { private: int age; char sexe; public: string nom; Patient(); Patient(string n, int a, char s); // fonction de comparaison appelée par greater_equal bool operator >= (const Patient & p) const; };

Patient.cpp Redéfinition de l’opérateur « >= » (2/2) 1.1 BIBLIOTHEQUE DE FONCTEURS Redéfinition de l’opérateur « >= » (2/2) #include "Patient.h" Patient::Patient() {} // Constructeur vide // Constructeur avec initialisation Patient::Patient(string n, int a, char s) { nom = n; age = a; sexe = s; } // fonction de comparaison appelée par greater_equal bool Patient::operator >= (const Patient & p) const { if (p.age > age) return true; if (p.age < age) return false; if (sexe == p.sexe) return true; if (p.sexe == ‘F') return true; return false;

priority_queue<T, deque<T> [,Compare<int>]> fp; 1.2 FILE A PRIORITE Adaptateur priority_queue priority_queue<T, deque<T> [,Compare<int>]> fp; Déclaration d’une file à priorité d’éléments de type T Implémentation d’une structure abstraite de file à priorité Fonctions membres bool empty(); true si la file est vide size_type size() const; Taille de la file T& top() : Lecture de la tête de la file (élément prioritaire) void push(const T& ); Ajout de l'élément en queue T& pop()(const T& ); Suppression d’un élément en tête

testPriorityQueue.cpp 1.2 FILE A PRIORITE priority_queue avec le foncteur « greater_equal » priority_queue<Patient, vector<Patient>, greater_equal <Patient> > fpp; fpp.push(*new Patient("Line", 25, 'F')); fpp.push(*new Patient("Lucie", 10, 'F')); fpp.push(*new Patient("Simon", 9, 'H')); fpp.push(*new Patient("Eric", 25, 'H')); fpp.push(*new Patient("Jean", 26, 'H')); cout << fpp.size() << endl; Patient p; while (fpp.empty() == false) { p = fpp.top(); fpp.pop(); cout << p.nom << " "; } 5 Jean Line Eric Lucie Simon

Ensemble ordonné (fonction de comparaison) set multiset 2 CONTENEURS ASSOCIATIFS Introduction Ensemble ordonné (fonction de comparaison) set Eléments tous distincts, pas d’insertion d’une nouvelle occurrence multiset Plusieurs occurrences possibles du même élément Conteneurs indexés par une clé de type quelconque et triés suivant cette clé (généralisation des séquences) Concept de paire (clé, valeur) pour représenter un élément map Clé et valeur sont distinctes, clé unique par élément multimap Une même clé peut correspondre à plusieurs éléments

Insertion et suppression 2 CONTENEURS ASSOCIATIFS Insertion et suppression bool empty(); true si le conteneur est vide size_type size() const; Nombre d'éléments du conteneur iterator insert(const key_T& k) Insertion de l’élément k iterator insert(iterator pos, const key_T& k) Insertion de l’élément k à partir l’emplacement pos void insert(iterator debut, iterator fin) Insertion de la séquence d’éléments void erase(iterator i); Suppression de l’élément référencé par l'itérateur i void erase(iterator debut, iterator fin); Suppression des éléments de la séquence [debut fin[ void erase(const key_T& k); Suppression des éléments de clé k void clear() Suppression de tous les éléments

size_type count(const key_T& k) const; Nombre d’éléments de clé k 2 CONTENEURS ASSOCIATIFS Recherche size_type count(const key_T& k) const; Nombre d’éléments de clé k iterator find(const key_T& k); Recherche d’un élément de clé k iterator lower_bound(const key_T& k) const; Itérateur sur le 1er élément dont la clé est supérieure ou égale à k iterator upper_bound(const key_T& k) const; Itérateur sur le 1er élément dont la clé est inférieure ou égale à k pair<iterator, iterator> equal_range(const key_T& k) const Paire d’itérateurs <lower_bound, upper_bound> key_compare key_comp() const; Objet de type fonction binaire de comparaison de deux clés value_compare value_comp() const; Objet de type fonction binaire de comparaison de deux valeurs

set<T [,Compare<T>]> s(n); testSet.cpp 2.1 CONTENEUR SET Instanciation et propriétés set<T [,Compare<T>]> s(n); Déclaration d’un ensemble ordonné s de n Items uniques de type T typedef set <Patient, greater_equal <Patient> > sPatient; typedef sPatient::iterator itsPatient; sPatient sp; sp.insert(*new Patient("Line", 25, 'F')); sp.insert(*new Patient("Lucie", 10, 'F')); sp.insert(*new Patient("Simon", 9, 'H')); sp.insert(*new Patient("Eric", 25, 'H')); sp.insert(*new Patient("Jean", 26, 'H')); for (itsPatient it = sp.begin();it != sp.end(); it++) cout << it->nom << " "; Simon Lucie Eric Line Jean

multiset<T [,Compare<T>]> ms(n); testMultiset.cpp 2.1 CONTENEUR MULTISET Instanciation et propriétés multiset<T [,Compare<T>]> ms(n); Déclaration d’un ensemble ordonné ms de n Items de type T typedef multiset <string> msString; typedef msString::iterator iMsString; int main() { msString amb; amb.insert("canapé"); amb.insert("tapis"); amb.insert("table"); amb.insert("chaise"); amb.insert("chaise");amb.insert("bureau"); amb.insert("lampe"); amb.insert("fauteuil"); for (iMsString it = amb.begin();it != amb.end(); it++) cout << *it << " "; cout << endl << amb.count("chaise"); } bureau canapé chaise chaise fauteuil lampe table tapis 2

map<T1, T2 [,Compare<T1>]> mc(n); 2.2 CONTENEUR MAP Instanciation et propriétés map<T1, T2 [,Compare<T1>]> mc(n); Déclaration d’un ensemble mc de n couples (clés de type T1, valeurs associées de type T2) pair make_pair(const key_T& k, const value_T& v) Regroupement de la clé et de la valeur dans un seul élément Insertion réussie si absence d’élément de même clé pair<iterator, bool> insert(const T& e); Tentative d’insertion d’un élément e pair<iterator, bool> insert(iterator i, const T& e); Tentative d’insertion d’un élément e à l'emplacement spécifié par l'itérateur i (améloration du temps de recherche de l’emplacement) void insert(iterator debut, iterator, fin) Tentative d’insertion des éléments de [debut fin[ d’une autre séquence

testMap.cpp Exemple 2.2 CONTENEUR MAP typedef map<string, float, less<string> > mStringFloat; void prix(mStringFloat prixFruit, string fruit) { mStringFloat::iterator it; if ((it = prixFruit.find(fruit)) == prixFruit.end()) cout << "fruit non référencé"; else cout << it->second; cout << endl; } int main() { mStringFloat prixFruit; prixFruit.insert(make_pair("poire", 1.5)); prixFruit.insert(make_pair("pêche", 2.7)); prixFruit.insert(make_pair("orange", 1.2)); prix(prixFruit, "poire"); prix(prixFruit, "pomme"); } 1.5 fruit non référencé

multimap<T1, int [,Compare<T2>]> mm(n); 2.2 CONTENEUR MULTIMAP Instanciation et propriétés multimap<T1, int [,Compare<T2>]> mm(n); Déclaration d’un ensemble mm de n couples (clés de type T1, valeurs associées de type T2) pair make_pair(const key_T& k, const value_T& v) Regroupement de la clé et de la valeur dans un seul élément Pas d’échec d’insertion iterator lower_bound(const T& e); Recherche du premier élément de clé k iterator upper_bound(const T& e); Recherche du dernier élément de clé k

testMultimap.cpp Exemple 2.2 CONTENEUR MULTIMAP typedef multimap<int, string, less<int> > mmIntString; typedef mmIntString::iterator iMmIntString; mmIntString conjug; conjug.insert(make_pair(1, "parler")); conjug.insert(make_pair(2, "choisir")); conjug.insert(make_pair(3, "prendre")); conjug.insert(make_pair(2, "finir")); conjug.insert(make_pair(1, "manger")); pair <iMmIntString, iMmIntString> it2; it2 = conjug.equal_range(2); for (iMmIntString it = it2.first;it != it2.second;it++) cout << it->second << " "; } choisir finir