Bibliothèque#standard#C++#

Documents pareils
INFO-F-105 Language de programmation I Séance VI

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004

Cours de C++ François Laroussinie. 2 novembre Dept. d Informatique, ENS de Cachan

Programmation en C/C++

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

COMPARAISONDESLANGAGESC, C++, JAVA ET

Programmation Par Objets


Introduction à la programmation concurrente

Génie Logiciel I. Cours VI - Typage statique / dynamique, fonctions virtuelles et classes abstraites, flots d entrées / sorties, et string

Le langage C++ (partie I)

Cours d Algorithmique et de Langage C v 3.0

Introduction à C++ et à wxwidgets

Brefs rappels sur la pile et le tas (Stack. / Heap) et les pointeurs

et Programmation Objet

Cours de C. Petits secrets du C & programmation avancée. Sébastien Paumier

Java 1.5 : principales nouveautés

Machines virtuelles fonctionnelles (suite) Compilation ML Java

Programmation système I Les entrées/sorties

Suivant les langages de programmation, modules plus avancés : modules imbriqués modules paramétrés par des modules (foncteurs)

Algorithmique et Programmation, IMA

Une introduction à Java

Archivage Messagerie Evolution pour usage HTML en utilisant Hypermail

Cours de Programmation Impérative: Zones de mémoires et pointeurs

Recherche dans un tableau

TP : Gestion d une image au format PGM

Arbres binaires de recherche

Approche Contract First

Introduction au langage C

Centre CPGE TSI - Safi 2010/2011. Algorithmique et programmation :

Chapitre 10. Les interfaces Comparable et Comparator 1

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

1.6- Génération de nombres aléatoires

Classe ClInfoCGI. Fonctions membres principales. Gestion des erreurs

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

4. Groupement d objets

Génération de code binaire pour application multimedia : une approche au vol

Cours de Programmation 2

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

La programmation orientée objet et le langage C++

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

Bases de programmation. Cours 5. Structurer les données

LE LANGAGE C++ ENAC 1997 A. DANCEL

Département Automatisation et Informatisation Année Programmation en C++ Institut des Sciences et Techniques de l Ingénieur d Angers

Programme Compte bancaire (code)

Programmer en JAVA. par Tama

Introduction au pricing d option en finance

Informatique III: Programmation en C++

Java Licence Professionnelle CISII,

Introduction à la programmation Travaux pratiques: séance d introduction INFO0201-1

Programmation avec des objets : Cours 7. Menu du jour

Programmation système de commandes en C

Introduction aux tests du logiciel

Le Langage C Version 1.2 c 2002 Florence HENRY Observatoire de Paris Université de Versailles florence.henry@obspm.fr

CHAPITRE V. Recherche et tri

30.avr.10 Présentation miniprojet. 9.mars.10 Cours 3 4.mai.10 Cours C mars.10 Cours 4 11.mai.10 Cours C++ 2

Cours de C. Allocation dynamique. Sébastien Paumier

as Architecture des Systèmes d Information

Depuis des années, les films de science fiction

Architecture des ordinateurs

Les structures de données. Rajae El Ouazzani

Partie 1 - Séquence 3 Original d une fonction

TD/TP PAC - Programmation n 3

Introduction. Les méthodes. Les méthodes. Identité et égalité. Identité et égalité. La copie d'objets. Identité et égalité.

Certificat Big Data - Master MAthématiques

Diagramme de déploiement

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

Programmation C++ (débutant)/instructions for, while et do...while

OS Réseaux et Programmation Système - C5

Lier Erlang avec d autres langages de programmation

Package Java.util Classe générique

STS SE. FreeRTOS. Programmation réseau WIFI. Programmation réseau. Socket Tcp. FlyPort smart Wi-Fi module

La programmation orientée objet Gestion de Connexions HTTP Manipulation de fichiers Transmission des données PHP/MySQL. Le langage PHP (2)

Composants Logiciels. Le modèle de composant de CORBA. Plan

Les arbres binaires de recherche

Compilation (INF 564)

Programmation MacOSX / ios

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

M2-Images. Rendu Temps Réel - OpenGL 4 et compute shaders. J.C. Iehl. December 18, 2013

Programmation Réseau. Sécurité Java. UFR Informatique jeudi 4 avril 13

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

Le prototype de la fonction main()

Cours Java Native Interface

IRL : Simulation distribuée pour les systèmes embarqués

03/04/2007. Tâche 1 Tâche 2 Tâche 3. Système Unix. Time sharing

Java Licence Professionnelle Cours 7 : Classes et méthodes abstraites

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

TD3: tableaux avancées, première classe et chaînes

Manuel d'installation

Langage Java. Classe de première SI

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Communication par sockets

SHERLOCK 7. Version du 01/09/09 JAVASCRIPT 1.5

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

4 Exemples de problèmes MapReduce incrémentaux

Introduction aux systèmes temps réel. Iulian Ober IRIT

Développement Logiciel

Structure d un programme

P r ob lé m a t iq u e d e la g é n é r icit é. Pr in cip e d e la g é n é r icit é e n Ja v a ( 1 /3 )

Transcription:

IntroducTon# Bibliothèque#standard#C++# ISIMA#A#ZZ2#A#2012# A.#&#C.#Duhamel# B.#Garcia## D.#Hill# L.#Yon# Présence#récurrente#en#développement#des#mêmes# structures#de#données#:#vecteur,#pile,#file,#ensemble # algorithmes#:#chercher,#trier,#insérer,#extraire # Éviter#de#réinventer#la#roue# temps#perdu#(codage,#débogage,#optmisaton)# utliser#l existant#(bibliothèques)# Tous#les#langages#modernes#ont#une#bibliothèque# java,#c#,#perl,#python# C++# 1 2 Pourquoi#uTliser#la#bibliothèque#standard#?# Fiabilité#:#collecTon#de#classes#largement#uTlisées# Portabilité#:#standard,#totalement#en#C++# Efficacité#:#uTlisaTon#intensive#de#la#généricité#et#des# structures#de#données#optmisées#pour#garantr#les# meilleures#performances# Compréhensibilité#:#toutes#les#classes#suivent#les# mêmes#conventons#d utlisaton# Contenu# C#standard# Classes#de#base#:#string,#excepTon,#flux# Mais#aussi#:#traits,#auto_ptr# Conteneurs#et#itérateurs# Algorithmes#et#foncteurs# STL# 3 4

Exemple# #include <cstdlib> Exemple#1# Exemple#en#C/C++# DéclaraTons#et#iniTalisaTons# Lire#des#enTers# Trier#la#saisie## Afficher#la#liste# Conteneur# Contenir#des#objets## Itérateur# Parcourir#un#conteneur## Début,#fin#élément#courant,#passer#à#élément#suivant# 5 inline int cmp (const void *a, const void *b) const int size = 1000; int aa = *(int *)a; int array [size]; int bb = *(int *)b; int n = 0; return (aa < bb)? -1 : (aa > bb)? 1 : 0; while (cin >> array[n++]); --n; qsort (array, n, sizeof(int), cmp); for (int i = 0; i < n; i++) cout << array[i] << "\n"; // Exemple inspiré de http://www.cs.brown.edu/people/jak/proglang/ cpp/stltut/tut.html 6 #include <algorithm> #include <vector> vector<int> v; int input; while (cin >> input) v.push_back (input); sort(v.begin(), v.end()); int n = v.size(); for (int i = 0; i < n; i++) cout << v[i] << "\n"; #include <algorithm> #include <vector> #include <iterator> vector<int> v; int input; while (cin >> input) v.push_back (input); sort(v.begin(), v.end()); copy (v.begin(), v.end(), ostream_iterator<int> (cout, "\n")); 7 8

#include <algorithm> #include <vector> #include <iterator> vector<int> v; istream_iterator<int> start (cin); istream_iterator<int> end; back_insert_iterator<vector<int> > dest (v); copy (start, end, dest); sort(v.begin(), v.end()); copy (v.begin(), v.end(), ostream_iterator<int>(cout, "\n")); 9 Classes#uTlitaires#de#la#STL# Classe#chaîne#de#caractères#:#string geston#automatque#de#la#mémoire#(fnc)# surcharge#des#opérateurs#classiques#(+,#<<)# définie#dans#le#namespace#std,#header#<string> utlisaton# #include <string> std::string str1("chaine lue : "), str2; std::cin >> str2; std::cout << str1 + str2 << std::endl; str2[0] = \0 ; st1 += str2; std::cout << str1 << std::endl; utliser#le#plus#possible#string#à#la#place#de#char * 10 #include <string> #include <sstream> Classes#uTlitaires#de#la#STL# Classe#excepTon#:#exception fonctonnalités#de#base#(fnc)# méthode#what()#:#renvoie#une#descripton#(char *)# définie#dans#le#namespace#std,#header#<exception> définiton# stringstream ss; ss << "annee :" << 2012 << endl; string s = ss.str(); s += "."; // s.c_str() permet d'accéder au char * interne clog << s; class exception public: exception () throw(); exception (const exception& rhs) throw(); exception & operator= (const exception& rhs) throw(); virtual ~exception() throw(); virtual const char * what() const throw(); ; 11 dériver#les#exceptons#personnelles#de#exception 12

Conteneurs#de#la#STL# Trois#grandes#classes#de#conteneurs# séquences#élémentaires# vecteur,#liste#et#file#à#double#entrée# adaptatons#des#séquences#élémentaires# pile,#file#et#file#à#priorité# conteneurs#associatfs# ensemble#avec/sans#unicité# associaton#avec#clé#unique/multple# Remarques# tous#définis#dans#le#namespace#std utlisaton#intensive#de#la#généricité#(type,#allocaton )# Conteneurs#de#la#STL# FoncTonnalités#communes#à#tous#les#conteneurs# Forme#Normale#de#Coplien# dimensionnement#automatque#de#la#capacité# lorsque#l inserton#d un#élément#viole#la#capacité# doublement#de#la#capacité# permet#une#adaptaton#rapide#à#la#taille#«#finale#»# quelques#méthodes# int C::size () const // nombre d éléments int C::max_size () const // nombre max bool C::empty () const // prédicat de vacuité void C::swap (C & cnt) // échange de contenu void C::clear () // purge# 13 14 Séquences#élémentaires# FoncTonnalités#communes#à#toutes#les#séquences# inserton# S::iterator S::insert (S::iterator bef, T & elt) S::iterator S::insert (S::iterator bef, int nb, T & elt) S::iterator S::insert (S::iterator it, S::const_iterator first, S::const_iterator last) suppression# S::iterator S::erase (S::iterator pos) S::iterator S::erase (S::const_iterator first, S::const_iterator last) accès#en#bordure#de#la#séquence void S::push_back (T & elt) void S::pop_back () T & S::front () const T & S::front () const T & S::back () const T & S::back () const Le#vecteur# header#:#<vector> déclaraton#:#std::vector<t> v;## méthodes#spécifiques# int V::capacity () const void V::reserve (int nb) X & V::operator[] (int idx) const X & V::operator[] (int idx) const intéressant#par#ses#accès#en#o(1)# déconseillé#pour#les#insertons/suppressions#o(n)# 15 16

Le#vecteur#(Exemple)# La#liste# #include <vector> typedef std::vector<int> ivector; header#:#<list> déclaraton#:#std::list<t> l;# méthodes#spécifiques# void L::push_front (const T & elt) void L::pop_front () ivector v1; v1.push_back(i); ivector v2(4); // taille initiale 4 v2[i] = i; std::cout << (v1 == v2)? Ok : Pas Ok << std::endl; return 0; 17 void L::remove (const T & elt) void L::sort () void L::sort (Comparator cmp) void L::merge(list<T> & l) splice, remove_if, unique intéressant#pour#les#insertons/suppressions#en#o(1)# déconseillé#pour#les#accès#directs#en#o(n)# 18 La#liste# La#file#à#double#entrée# #include <list> File#à#double#entrée#(vecteur#circulaire)# header#:#<deque> int main(int, char **) typedef std::list<int> ilist; ilist l; l.push_back((10 + 3*i) % 5); l.sort(); // 0 1 3 4 l.reverse(); // 4 3 1 0 // affiche le debut et la fin std::cout << l.front() << ' ' << l.back() << std::endl; déclaraton#:#std::deque<t> d;# méthodes#spécifiques# int D::capacity () const void D::reserve (int nb) void D::push_front (const T & elt) void D::pop_front () X & D::operator[] (int idx) const X & D::operator[] (int idx) const tous#les#avantages#de#vector return 0; geston#des#insertons/suppressions#en#tête#en#o(1)# 19 20

La#file#à#double#entrée# Les#itérateurs# #include <deque> int main(int, char **) typedef std::deque<int> ideque; ideque v1; v1.push_back(i); ideque v2(4); // taille initiale 4 v2[i] = i; std::cout << (v1 == v2)? Ok : Pas Ok << std::endl; return 0; Constat# souhaite#souvent#parcourir#les#éléments#d un#conteneur# soluton#naïve#:#définir#un#pointeur#sur#la#cellule#courante#dans#le#conteneur# limite#:#on#ne#peut#pas#avoir#deux#parcours#en#même#temps# soluton#temporaire#:#sortr#le#pointeur#du#conteneur#(en#l encapsulant#!)# souhaite#parfois#avoir#des#parcours#différents#(avant,#arrière )# soluton#naïve#:#définir#la#stratégie#de#parcours#dans#le#conteneur# limite#:#on#ne#peut#avoir#(proprement)#qu un#seul#type#de#parcours# soluton#temporaire#:#sortr#la#stratégie#du#conteneur#(en#l encapsulant#!)# Itérateur# classe#qui#définit#l accès#à#un#élément#courant#du#conteneur# classe#qui#définit#sa#stratégie#de#parcours# 21 22 Les#itérateurs# Stratégies#d accès#et#de#parcours#des#conteneurs# chaque#itérateur#définit#sa#propre#stratégie#de#parcours# typiquement#un#pointeur#sur#un#élément#du#conteneur# doit#connaître#l implémentaton#de#son#conteneur# défini#comme#une#classe#imbriquée#dans#le#conteneur# class Conteneur public: class Iterateur ; ; Les#itérateurs# 4#types#d itérateur#par#conteneur# conteneur::iterator# conteneur::const_iterator# conteneur::reverse_iterator# conteneur::const_reverse_iterator# Balises#fournies#par#le#conteneur# rend() 1 2 n-1 n rbegin() possibilité#d avoir#plusieurs#itérateurs#en#même#temps# incompatbilité#des#itérateurs#de#conteneurs#différents# 23 begin() end() parcours#premier# #dernier#:#begin(),#end()# parcours#dernier# #premier#:#rbegin(),#rend()# 24

Les#itérateurs# FoncTonnalités# FNC# opérateurs#de#comparaison#!=#et#== opérateur#de#déréférencement#* opérateur#d'incrémentaton#(pré#et#post)#++ Les#itérateurs# UTlisaTon# parcours#d un#conteneur# conteneur c; conteneur::iterator it; for (it = c.begin(); it!= c.end(); ++it) do_something(*it); valeur#de#retour#de#find() permet#une#opératon#immédiate#sur#l objet# complexité#de#l accès#suivant#:#o(1)# conteneur c; conteneur::iterator it = find(c.begin(), c.end(), elt); do_something(*it); 25 26 Conteneur##associaTf#(1)# Paire# Clé#/#valeur#:#map# Clé#/#Valeurs#:#mulTmap# Clés#comparable# Structure#d arbre#binaire# map<string, string> liste; first# second# liste.insert(make_pair("loic", "loic@isima.fr")); liste["benny"] = "drch@isima.fr"; // creation par recherche 27 Conteneur##associaTf#(2)# const string& first(const pair<string,string>& p) return p.first; int main(int, char**) map<string, string> liste; map<string, string>::const_iterator it = liste.begin(); while(it!=liste.end()) cout << it->first << " " << it->second << endl; ++it; transform(liste.begin(), liste.end(), ostream_iterator<string>(cout, " "), first); return 0; 28

Les#foncteurs# Constat# souhaite#souvent#appliquer#un#algorithme#sur#un#conteneur# soluton#naïve#:#le#placer#en#méthode#du#conteneur# limite#:#polluton#de#l API#du#conteneur# soluton#:#placer#les#algorithmes#dans#des#classes#dédiées# souhaite#parfois#avoir#plusieurs#versions#de#l algorithme# soluton#naïve#:#utliser#la#surcharge#(polymorphisme#faible)# limite#:#on#n est#pas#sûr#d appeler#la#bonne#version# soluton#:#utliser#l héritage# Les#foncteurs# Combinaison#de#deux#principes# surcharge#de#l opérateur#() arité#spécifiée#par#le#concepteur# syntaxe#:#type_retour A::operator() (paramètres) intérêt#:#un#objet#se#comporte#comme#une#foncton# note#:#peut#aussi#être#utlisé#pour#remplacer#l opérateur#[] l algorithme#souhaité#est#implémenté#dans#l opérateur#() les#arguments#de#l algorithme#sont#placés#en#argument# Foncteur# classe#qui#implémente#un#algorithme#sur#le#conteneur# une#sousaclasse#par#variante# accès#aux#éléments#du#conteneur#par#les#itérateurs# 29 30 Les#foncteurs#:#comparateur# principe# pas#d état#interne# opérateur#()#prenant#les#deux#objets#à#comparer# class Comparator ; public: Comparator () bool operator() (const A & a1, const A & a2) const return (a1.val() < a2.val()); Comparator cmp; A a1, a2; std::cout << cmp(a1,a2) << std::endl; Les#foncteurs# ManipulaTon#globale#du#conteneur# trois#enttés# un#conteneur#pour#le#stockage#des#objets# des#itérateurs#pour#les#accès#aux#objets# des#algorithmes#pour#la#manipulaton#des#objets# fonctonnement#conjoint# les#algorithmes#opèrent#sur#le#conteneur#via#les#itérateurs# conteneur itérateurs algorithme 31 32

Les#foncteurs#:#générateur#de#nombres#pairs# Principe# état#interne#conservé#par#les#atributs# opérateur#()#sans#paramètres#pour#la#génératon#des# nombres# generate()# class GenPair ; protected: unsigned val; public: GenPair () val = 0; unsigned operator() (void) val += 2; return val; GenPair gen; vector<int> v(10); generate(v.begin(), v.end(), gp); copy(v.begin(), v.end(), ostream_iterator<int>(cout, " ")); GenPair gen; std::cout << gen() << << gen() << std::endl; // affiche 2 4 33 34 Pour#aller#plus#loin#:#la#bibliothèque#boost# Quelques#liens# # Super#mémento## htp://www.medini.org/download/stlqr/1.32/stlqraa4.pdf## #DocumentaTon#officielle#SGI# htp://www.sgi.com/tech/stl/## ReprésentaTon#UML#de#la#STL# htp://frog.isima.fr/bruno/retrieve.htm?archive=stl_containers## Sur#le#C++#en#général## htp://www.cplusplus.com/reference/## # 35 36