Structures de données IFT-10541 Abder Alikacem La classe vector Édition Septembre 2009 Département dinformatique et de génie logiciel.

Slides:



Advertisements
Présentations similaires
La programmation orientée objet avec Java L3-MIAGE Plan
Advertisements

Cours n° 7 Standard Template Library II.
Cours n° 6 Standard Template Library I.
Initiation à la programmation et algorithmique cours 4
3. Variantes de l’algorithme
Portée des variables VBA & Excel
Cours n° 8 Conception et Programmation à Objets
Approfondissement du langage
1 Révisions. 2 Tableaux non contraints Déclaration du type : type Tvecteur = tableau ( intervalle dentiers) de entiers type Tvecteur is array (integer.
8. Les tableaux P. Costamagna – ISEN N1.
Introduction à la programmation (420-PK2-SL) cours 15 Gestion des applications Technologie de linformation (LEA.BW)
Algorithme et programmation
Initiation à la programmation et algorithmique cours 3
Lycée Louis Vincent SEANCE 6 Python Les listes Lundi 25 novembre 2013.
Chapitre IV. Structures linéaires (piles, files, listes chaînées)
Points importants de la semaine Les fonctions. La portée. La passage par copie. Les tableaux.
Structures de données linéaires
OCaml - Les listes L3 MI.
Points importants de la semaine Le paramétrage. La portée. Le passage par copie. Le passage par référence.
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++
8PRO100 Éléments de programmation Allocation dynamique de la mémoire.
Introduction au paradigme objet Concepts importants surcharge (overload) redéfinition (override) Définition d’une classe Définition des attributs.
Standard Template Library (STL)
Structures de données IFT-2000
Etude dune bibliothèque: Permutations sur les listes.
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
Les pointeurs Modes d’adressage de variables. Définition d’un pointeur. Opérateurs de base. Opérations élémentaires. Pointeurs et tableaux. Pointeurs et.
Ensembles Définition d’un ensemble. Opérations sur les ensembles. Accès, suppression et ajout d’éléments d’un ensemble. Fonctions permettant de manipuler.
Structures de données IFT-2000
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
Structures de données IFT-2000 Abder Alikacem Standard Template library Édition Septembre 2009 Département dinformatique et de génie logiciel.
Structures de données IFT Abder Alikacem Gestion des exceptions Département dinformatique et de génie logiciel Édition Septembre 2009.
Structures de données IFT-2000
Structures de données IFT-2000
Programme de baccalauréat en informatique Programmation Orientée Objets IFT Thierry EUDE Module 7 : Classes et fonctions paramétrables Département.
Conteneurs STL.
Une nouvelle structure de données : les tableaux
Les Fonctions. Définir une fonction Sections de code indépendantes que lon peut appeler à nimporte quel moment et dans nimporte quel ordre. Bout de code.
Standard Template Library
C++ : fonctions et opérateurs
Leçon 1 : notion dobjet IUP Génie Informatique Besançon Méthode et Outils pour la Programmation Françoise Greffier Université de Franche-Comté.
Structures de données IFT-2000
Structures de données IFT-10541
Structures de données IFT Abder Alikacem Linéarisation des matrices Département dinformatique et de génie logiciel Édition septembre 2009.
Structures de données IFT-2000
Plan cours La notion de pointeur et d’adresse mémoire.
PHP 2° PARTIE : FONCTIONS ET FORMULAIRE
Structures de données IFT-2000
Structures des données
1 Structures des données. 2  Le tableau permettait de désigner sous un seul nom un ensemble de valeurs de même type, chacune d'entre elles étant repérée.
Tutorat en bio-informatique
5ième Classe (Mercredi, 19 octobre) Prog CSI2572.
Cours LCS N°4 Présenté par Mr: LALLALI
Conception de Programmes - IUT de Paris - 1ère année Quelques éléments du langage C++ Les références La surcharge de fonctions Les fonctions «
ASP.NET : Les composants asp dédiés aux données.  Un tableau de données=>Génère du en sortie.  Il permet d’afficher/modifier des données  On peut le.
8PRO107 Éléments de programmation Les adresses et les pointeurs.
Scripts et fonctions Instructions de contrôle
Algorithmique Tableaux de données
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.
Philippe Gandy - 22 septembre 2015 Basé sur les notes de cours de Daniel Morin et Roch Leclerc.
Objets et Actions Élémentaires.
Philippe Gandy - 15 septembre 2015 Basé sur les notes de cours de Daniel Morin et Roch Leclerc.
Philippe Gandy – 10 novembre 2015 Basé sur les notes de cours de Daniel Morin et Roch Leclerc.
1 Tableur Excel. 2 Introduction Un tableur est un logiciel permettant de manipuler des données numériques et d'effectuer automatiquement des calculs sur.
Transcription de la présentation:

Structures de données IFT Abder Alikacem La classe vector Édition Septembre 2009 Département dinformatique et de génie logiciel

Plan Introduction Définition Déclaration et initialisation Constante Vecteur de vecteur Affectation Accès aux éléments Opérateurs relationnels Méthodes

Tableaux dynamiques: vecteurs Pour pallier les défauts inhérents à la rigidité des tableaux de taille fixe (built-in array), la librairie générique standard de C++ (STL (Standard Template Library)) fournit un type (en fait de type, il sagit en réalité dun chablon de classe, template classe), de donnée dénommée vector (vecteur) cest-à-dire une définition générique (valide et réutilisable pour nimporte quel type, de base ou complexe), offrant au programmeur un moyen très efficace pour construire des structures de données permettant de représenter des tableaux de tailles variables (i.e. tableaux dynamiques). Pour être exact, les vectors sont plus que de simples tableaux dynamiques; ils sinscrivent dans un famille plus générale déléments, utilisés comme briques de bases pour les structures de données complexes, éléments que lon appelle conteneurs (containers) ou collections, et pour lesquels un ensembre de caractéristiques et contraintes très précises sont définies, comme par exemples les performances minimales des algorithmes daccès Et de recherche.

Les vecteurs La taille de ces «tableaux» nest pas obligatoirement prédéfinie, et peut donc varier en cours dutilisation. Pour pouvoir utiliser ces vecteurs dans un programme, il faut, comme dans le cas des entrées-sorties, importer les prototypes et définitions contenus dans la librairie, au moyen de la directive dinclusion: #include

Les vecteurs Un vecteur peut être déclaré selon la syntaxe suivante: vector «identificateur»; Avec type nimporte quel type, élémentaire ou non, et correspondant au type de base du tableau. #include... vector age; Il sagit dune déclaration de variable («age») tout à fait traditionnelle, dans laquelle la séquence «vector » correspond à lindication du type de la variable, en loccurence un tableau dynamique (vecteur) dentiers. On voit dans ce cas clairement ressortir la nature composite du type.

Les vecteurs Le fait que lon sintéresse ici à des collections dun nombre potentiellement variable déléments explique que la déclaration puisse ne comporter aucune indication sur la taille initiale du tableau. Une variable ainsi déclarée correspond alors tout simplement à un tableau vide. Cependant, une taille initiale peut, si nécessaire, être indiquée; la syntaxe de la déclaration est alors: vector «identificateur»(«taille»); Un tableau nommé identificateur comportant taille éléments de type Type sera créé, chacun des éléments ayant comme valeur la valeur par défaut de type généralement une valeur dérivée de lexpression (0).

Les vecteurs Exemple vector age(5); Correspond à la déclaration dun tableau dentiers, initialement composé de 5 éléments valant 0. age [0] 0 age [1] 0 age [2] 0 age [3] 0 age [4] 0 age

Les vecteurs Déclaration avec initialisation La déclaration dun vecteur peut être associée à une initialisation explicite des éléments initiaux; cependant, cette initialisation ne pourra consister quen (a) une duplication dun même élément, ou (b) en une duplication dun vecteur pré-existant: (a) vector «identificateur»(«taille»,«valeur»); où valeur est une expression de type type, dont le résultat sera pris comme valeur intiale des taille éléments du tableau identificateur. Exemple vector vect1(5,8); déclare le vecteur dentiers vect1 avec un contenu initial de 5 entiers valant «8»

Les vecteurs Déclaration avec initialisation (b) vector «identificateur»(«id-vector»); où id-vector est un identificateur de vecteur de type de base type. Exemple vector vect2(vect1); déclare le vecteur dentiers vect2, avec un contenu initial identique au contenu de vect1 (duplication).

Les vecteurs Constante Comme pour tous les autres types, il est possible de déclarer des constantes de type vecteur. La syntaxe est identique à celle des autres déclarations de constantes: const vector «identificateur»(«initialisation»); identificateur correspond alors à un vecteur dont tant le nombre déléments que la valeur de chacun de ces éléments sont fixes (et ne peuvent donc êtres modifiés).

Les vecteurs Constante const vector age; Correspond à la déclaration dun vecteur constant vide (ne contenant aucun élément) et auquel aucun élément ne pourra être ajouté const vector vect2(vect1); Correspond à la déclaration dune copie figée (snapshot) du vecteur vect1. Cette déclaration est bien sûr totalement inutile. Il nest pas possible de déclarer des vecteurs de constantes. Ainsi, la syntaxe vector «identificateur» bien que licite en soit, nest en pratique pas utilisable.

Les vecteurs Vecteur de vecteur Le type de base dun vecteur est peut être un type quelconque, y compris composé. En particulier, le type de base dun vecteur peut être lui-même un vecteur. vector > matrice; Attention, dans le cas dune déclaration directe dune telle structure, il est obligatoire de séparer les «>», présents en fin de définition du type, par un espace. Cette contrainte est en fait une convention adoptée pour distinguer ce typage de lopérateur «>>».

Les vecteurs Vecteur de vecteur Dun point de vue sémantique, les vecteurs de vecteurs ne correspondent pas (nécessairement) à des matrices, mais simplement à des ensembles densembles déléments.

Les vecteurs Affectation Toute variable de type vector peut être modifiée (globalement) par affectation: «identificateur» = «valeur»; où valeur est une expression de même type quidentificateur, notamment en ce qui concerne le type de base. Dans ce cas, la modification va porter sur lensemble des éléments de la structure: // 1) Déclarations-initialisations vector v1(4,1); vector v2(3,2); vector c3(2,a); // 2) Affectations v2 = v1; v1 = vector (3,8); c3 = vector (4,7); // ILLEGAL v1 v2 c3

Les vecteurs Accès aux éléments Chaque élément dun vecteur est accessible individuellement. Différents moyens permettent daccéder aux éléments, et notamment lindexation comme dans le cas des tableaux de taille fixe: lindice, placé entre crochets «[]», indique le rang de lélément dans le tableau. Les éléments dun vecteur de taille n sont sont numérotés de 0 à n-1. Dans le cas daccès via lopérateur «[]», Il ny a pas de contrôle de débordement du tableau ! Attention!

Les vecteurs Opérateurs relationnels Les opérateurs relationnels suivant sont définis pour les vecteurs: OpérateurOpération >= strictement inférieur inférieur ou égal strictement supérieur supérieur ou égal comparaison lexicographique des éléments. == != égalité différence (non-égalité)

Les vecteurs Méthodes Un certain nombre dopérations, directement liées à laspect «ensembliste» des vecteurs, sont définies dans la librairie STL. Lutilisation de ces opérations particulières, appelées méthodes, se fait par le biais de la syntaxe suivante: «id-vector».«id-methode»(«arguments»); Exemple individus.puch_back(jean); à comme effet dappliquer la méthode push_back, au vecteur individus, en prenant jean comme paramètre [de la méthode]. Comme les fonction, les méthodes peuvent éventuellement retourner une valeur.

Les vecteurs Méthodes prédicats. Par convention: - «vect» désignera la variable vecteur pour laquelle la méthode est invoquée; - «base-type» désignera le type de base dun vecteur int size(): renvoie la taille du vecteur (i.e. son nombre déléments) Une manière usuelle pour parcourir les éléments dun vecteur est donc litération for suivante: for (int i(0); i<vect.size(); ++i) { // traitements } Dans le cas où le sens de parcours est sans importance, on pourra avantageusement remplacer cette séquence par cette autre, plus efficace: for (int i(vect.size()-1); i >= 0; --i) {... } bool empty(): indique si le vecteur est vide (ou non). On a léquivalence suivante: «vect.empty()» «(vect.size() == 0)»

Les vecteurs Modificateurs void clear(): vide le vecteur, en supprimant tous ses éléments. Après linvocation de cette méthode, le prédicat «empty» est forcément vrai. void pop_back(): supprime le dernier élément du vecteur. void push_back(const base-type element): ajoute element à la fin du vecteur;element devient donc le nouveau dernier élément du vecteur. Exemple: La boucle suivante initialise un vecteur dentiers positifs, de taille 8, en demandant à lutilisateur de saisir les valeurs initiales. Lors de la saisie, lutilisateur a la possibilité deffacer la valeur Précédemment saisie, en indiquant un chiffre négatif, ou deffacer tout le vecteur, en entrant 0. while (vect.size() < 8) { int val; cout << "Entrez coefficient " << vect.size() << : << flush; cin >> val; if (val < 0) {vect.pop_back(); continue;} if (val == 0) {vect.clear(); continue;} vect.push_back(val); }

Les vecteurs Accès base-type front(): renvoie une référence vers le premier élément du vecteur. Les séquences «vect.front()» et «vect[0]» sont donc équivalentes. Précondition: le vecteur nest pas vide (le prédicat «empty()» est faux). Exemple: Litération suivante a comme effet de diviser tous les éléments dun vecteur (à lexception du premier), par le premier élément du vecteur. for (int i(1); i<vect.size(); ++i) {vect[i] /= vect.front();}

Les vecteurs Accès base-type back(): renvoie une référence vers le dernier élément du vecteur. Les séquences «vect.back()» et «vect[vect.size()-1]» sont équivalentes. Précondition: le vecteur nest pas vide (le prédicat «empty()» est faux). Exemple: remplir un vecteur dentiers, en demandant chaque valeur à lutilisateur; le vecteur est considéré comme plein lorsque lutilisateur entre la valeur 0. do { vect.push_back(saisirEntier) } while (vect.back());