37
Compléments Buts et objectifs La librairie STD Organisation de la STL Utilisation générale Cas concrets Manipulation de fichiers Manipulations des vecteurs Manipulation des chaînes Les opérations mathématiques Pour aller plus loin 4.1 Chapitre 4 Compléments Cours « Programmation Orientée Objet » Semestre 7 (2018) Julien Yves ROLLAND [email protected] Laboratoire de Mathématiques de Besançon Université Bourgogne Franche-Comté

Compléments Chapitre 4lmb.univ-fcomte.fr/IMG/pdf/poo-chap4-beamer.pdf · 2018. 11. 7. · Compléments Buts et objectifs La librairie STD Organisation de la STL Utilisation générale

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Compléments Chapitre 4lmb.univ-fcomte.fr/IMG/pdf/poo-chap4-beamer.pdf · 2018. 11. 7. · Compléments Buts et objectifs La librairie STD Organisation de la STL Utilisation générale

Compléments

Buts et objectifs

La librairie STDOrganisation de la STL

Utilisation générale

Cas concretsManipulation de fichiers

Manipulations des vecteurs

Manipulation des chaînes

Les opérationsmathématiques

Pour aller plus loin

4.1

Chapitre 4ComplémentsCours « Programmation Orientée Objet »Semestre 7 (2018)

Julien Yves [email protected]

Laboratoire de Mathématiques de BesançonUniversité Bourgogne Franche-Comté

Page 2: Compléments Chapitre 4lmb.univ-fcomte.fr/IMG/pdf/poo-chap4-beamer.pdf · 2018. 11. 7. · Compléments Buts et objectifs La librairie STD Organisation de la STL Utilisation générale

Compléments

Buts et objectifs

La librairie STDOrganisation de la STL

Utilisation générale

Cas concretsManipulation de fichiers

Manipulations des vecteurs

Manipulation des chaînes

Les opérationsmathématiques

Pour aller plus loin

4.2

Buts et objectifs de ce chapitre.

1 Employer la librairie standard "STD" ;2 Présenter les conteneurs ;3 Utiliser les itérateurs ;4 Utiliser les algorithmes de la STL ;5 Présenter des cas pratiques d’usage.

Page 3: Compléments Chapitre 4lmb.univ-fcomte.fr/IMG/pdf/poo-chap4-beamer.pdf · 2018. 11. 7. · Compléments Buts et objectifs La librairie STD Organisation de la STL Utilisation générale

Compléments

Buts et objectifs

La librairie STDOrganisation de la STL

Utilisation générale

Cas concretsManipulation de fichiers

Manipulations des vecteurs

Manipulation des chaînes

Les opérationsmathématiques

Pour aller plus loin

4.3

Structure du chapitre.

1 La librairie STD

2 Cas concrets

3 Pour aller plus loin

Page 4: Compléments Chapitre 4lmb.univ-fcomte.fr/IMG/pdf/poo-chap4-beamer.pdf · 2018. 11. 7. · Compléments Buts et objectifs La librairie STD Organisation de la STL Utilisation générale

Compléments

Buts et objectifs

La librairie STDOrganisation de la STL

Utilisation générale

Cas concretsManipulation de fichiers

Manipulations des vecteurs

Manipulation des chaînes

Les opérationsmathématiques

Pour aller plus loin

4.4

1 La librairie STDOrganisation de la STLUtilisation générale

2 Cas concrets

3 Pour aller plus loin

Page 5: Compléments Chapitre 4lmb.univ-fcomte.fr/IMG/pdf/poo-chap4-beamer.pdf · 2018. 11. 7. · Compléments Buts et objectifs La librairie STD Organisation de la STL Utilisation générale

Compléments

Buts et objectifs

La librairie STDOrganisation de la STL

Utilisation générale

Cas concretsManipulation de fichiers

Manipulations des vecteurs

Manipulation des chaînes

Les opérationsmathématiques

Pour aller plus loin

4.5

La librairie standard

En complément des types fondamentaux, et basé sur la POOet la programmation générique, le C++ fournit un ensemble declasse et de template facilitant le développement des codesC++ et simplifiant les opérations courantes : la "StandardTemplate Library" (STL).

Elle est déclarée dans un ensemble de fichiers entêtes :• installés en même temps que le compilateur et

accessibles par l’inclusion "#include <...> "• définis au sein de l’espace de nom "std", d’où l’utilisation

commune de l’instruction "using namespace std"

Page 6: Compléments Chapitre 4lmb.univ-fcomte.fr/IMG/pdf/poo-chap4-beamer.pdf · 2018. 11. 7. · Compléments Buts et objectifs La librairie STD Organisation de la STL Utilisation générale

Compléments

Buts et objectifs

La librairie STDOrganisation de la STL

Utilisation générale

Cas concretsManipulation de fichiers

Manipulations des vecteurs

Manipulation des chaînes

Les opérationsmathématiques

Pour aller plus loin

4.6

1 La librairie STDOrganisation de la STLUtilisation générale

2 Cas concrets

3 Pour aller plus loin

Page 7: Compléments Chapitre 4lmb.univ-fcomte.fr/IMG/pdf/poo-chap4-beamer.pdf · 2018. 11. 7. · Compléments Buts et objectifs La librairie STD Organisation de la STL Utilisation générale

Compléments

Buts et objectifs

La librairie STDOrganisation de la STL

Utilisation générale

Cas concretsManipulation de fichiers

Manipulations des vecteurs

Manipulation des chaînes

Les opérationsmathématiques

Pour aller plus loin

4.7

Les composants de la STL

Les conteneurs : Stocker des données

Les conteneurs sont des structures permettant de stocker, defaçon hiérarchisée ou non, des données de type générique.Ex : std :: vector<>, std :: string , std :: map<>

Les itérateurs : Accéder aux données

Les itérateurs sont des types permettant d’accéder et parcourirles données stockées dans les conteneurs.

Les algorithmes : Utiliser les données

Des algorithmes sont aussi définis qui facilitent et optimisentles opérations "usuelles" sur les conteneurs.Ex : trier et ordonner des données, obtenir la date courante,générer des distributions aléatoires,. . .

Page 8: Compléments Chapitre 4lmb.univ-fcomte.fr/IMG/pdf/poo-chap4-beamer.pdf · 2018. 11. 7. · Compléments Buts et objectifs La librairie STD Organisation de la STL Utilisation générale

Compléments

Buts et objectifs

La librairie STDOrganisation de la STL

Utilisation générale

Cas concretsManipulation de fichiers

Manipulations des vecteurs

Manipulation des chaînes

Les opérationsmathématiques

Pour aller plus loin

4.8

Rapide tour des entêtes

Conteneurs

Les conteneurs les plus utilisés sont :<string> Tableau de caractères<vector> Tableau dynamique générique<array> Tableau statique générique<map> Dictionnaire (clé, valeur)<set> Ensemble<stack> Pile (first in, last out)<queue> File (first in, first out)

Les flux

Manipulation et redirection des données :<iostream> Flux entrée/sortie<istream> Flux entrée<ostream> Flux sortie<fstream> Fichiers<iomanip> Format et manipulation de flux

Page 9: Compléments Chapitre 4lmb.univ-fcomte.fr/IMG/pdf/poo-chap4-beamer.pdf · 2018. 11. 7. · Compléments Buts et objectifs La librairie STD Organisation de la STL Utilisation générale

Compléments

Buts et objectifs

La librairie STDOrganisation de la STL

Utilisation générale

Cas concretsManipulation de fichiers

Manipulations des vecteurs

Manipulation des chaînes

Les opérationsmathématiques

Pour aller plus loin

4.9

Types numériques

Types utiles pour les mathématiques :<complex> Nombres complexes et leur arithmétique<random> Génération aléatoire<valarray> Vecteur numérique

Les algorithmes

Algorithmes optimisés :<algorithm> sur les conteneurs<numeric> sur les types numériques<cmath> Fonctions mathématiques

Utilitaires

Aides diverses à la programmation :<time> Temps machine<exception> Gestion des erreurs<thread> Parallélisation<memory> Pointeurs intelligents

Page 10: Compléments Chapitre 4lmb.univ-fcomte.fr/IMG/pdf/poo-chap4-beamer.pdf · 2018. 11. 7. · Compléments Buts et objectifs La librairie STD Organisation de la STL Utilisation générale

Compléments

Buts et objectifs

La librairie STDOrganisation de la STL

Utilisation générale

Cas concretsManipulation de fichiers

Manipulations des vecteurs

Manipulation des chaînes

Les opérationsmathématiques

Pour aller plus loin

4.10

Documentations

Nous n’allons pas présenter la totalité de la STL.L’apprentissage se fait au fur et à mesure des besoins et enconsultant la documentation. Voici quelques ressources :• http://en.cppreference.com/w/

Documentation complète sur toutes les structures de la STL. Entre autres est

clairement expliquée l’utilité des template et des classes de la STL. Des exemples

sont fournis pour chaque fonction membre et cas d’utilisation.

• http://www.cplusplus.com/reference/Même type de contenu mais au visuel plus agréable (et bien plus lent).

• « The C++ Programming Language » Fourth EditionBjarne Stroustrup – Addison-WesleyLes chapitres 30-44 sont entièrement consacrés à la documentation (utilisateurs

non débutants) de la STL

• « Programming Principles and Practice Using C++ »Bjarne Stroustrup – Addison-WesleyLes partie III et IV présentent les différents aspects de la STL avec de nombreux

exemples, l’appendice B résume la STL.

Page 11: Compléments Chapitre 4lmb.univ-fcomte.fr/IMG/pdf/poo-chap4-beamer.pdf · 2018. 11. 7. · Compléments Buts et objectifs La librairie STD Organisation de la STL Utilisation générale

Compléments

Buts et objectifs

La librairie STDOrganisation de la STL

Utilisation générale

Cas concretsManipulation de fichiers

Manipulations des vecteurs

Manipulation des chaînes

Les opérationsmathématiques

Pour aller plus loin

4.11

1 La librairie STDOrganisation de la STLUtilisation générale

2 Cas concrets

3 Pour aller plus loin

Page 12: Compléments Chapitre 4lmb.univ-fcomte.fr/IMG/pdf/poo-chap4-beamer.pdf · 2018. 11. 7. · Compléments Buts et objectifs La librairie STD Organisation de la STL Utilisation générale

Compléments

Buts et objectifs

La librairie STDOrganisation de la STL

Utilisation générale

Cas concretsManipulation de fichiers

Manipulations des vecteurs

Manipulation des chaînes

Les opérationsmathématiques

Pour aller plus loin

4.12

Création de conteneurs

Types des conteneurs

La plupart des conteneurs sont en fait des template, il estnécessaire de les instancier en spécifiant ce qu’ils vontcontenir.

1 s td : : array <double , 7> a {1 ,2 ,3 ,4 ,5 ,6 ,7 } ;2

3 s td : : vector < i n t > v (6 ,0 ) ;4

5 s td : : map<std : : s t r i n g , i n t > m;6 m[ " Canard " ] = 5 ;7 m[ " pates " ] = 2 ;8 m[ " c a n c o i l l o t t e " ] = 10;

Page 13: Compléments Chapitre 4lmb.univ-fcomte.fr/IMG/pdf/poo-chap4-beamer.pdf · 2018. 11. 7. · Compléments Buts et objectifs La librairie STD Organisation de la STL Utilisation générale

Compléments

Buts et objectifs

La librairie STDOrganisation de la STL

Utilisation générale

Cas concretsManipulation de fichiers

Manipulations des vecteurs

Manipulation des chaînes

Les opérationsmathématiques

Pour aller plus loin

4.13

Parcours des conteneurs

Conteneur à accès aléatoire

"Accès aléatoire" fait référence aux conteneurs où chaquecase possède un indice. Un dictionnaire par exemple n’a pasd’indice, mais des clés.Ces conteneurs peuvent être manipulés comme les "C-array"en utilisant la fonction membre .size () communes.

1 s td : : array <double , 7> a {1 ,2 ,3 ,4 ,5 ,6 ,7 } ;2

3 f o r ( i n t i =0; i < a . s ize ( ) ; ++ i )4 std : : cout << a [ i ] << " " ;

Parcours par intervalles (C++11)

Nouvelle boucle for adaptée à ce genre de cas.Inconvénient en numérique : plus aucun indice.

5 f o r ( i n t v : a )6 std : : cout << v << " " ;

Page 14: Compléments Chapitre 4lmb.univ-fcomte.fr/IMG/pdf/poo-chap4-beamer.pdf · 2018. 11. 7. · Compléments Buts et objectifs La librairie STD Organisation de la STL Utilisation générale

Compléments

Buts et objectifs

La librairie STDOrganisation de la STL

Utilisation générale

Cas concretsManipulation de fichiers

Manipulations des vecteurs

Manipulation des chaînes

Les opérationsmathématiques

Pour aller plus loin

4.14

Le concept d’itérateur

Définition

Un itérateur est un type particulier, très similaire au pointeur,qui permet de "pointer" une position dans un conteneur etd’accéder à son contenu par indirection.

Les interfaces des conteneurs utilisent beaucoup l’itérareur etla très grande majorité des algorithmes de la STL les utilisentcomme arguments.

1 s td : : f i l l ( a . begin ( ) , a . end ( ) , 33) ;2

3 i n t i { 0 } ;4 f o r ( i n t & j : v )5 j = ++ i ;6

7 s td : : vector < i n t > : : i t e r a t o r t {8 std : : f i n d ( v . begin ( ) , v . end ( ) , 3)9 } ;

10 i f ( t != v . end ( ) )11 std : : cout << ∗ t << std : : endl ;

Page 15: Compléments Chapitre 4lmb.univ-fcomte.fr/IMG/pdf/poo-chap4-beamer.pdf · 2018. 11. 7. · Compléments Buts et objectifs La librairie STD Organisation de la STL Utilisation générale

Compléments

Buts et objectifs

La librairie STDOrganisation de la STL

Utilisation générale

Cas concretsManipulation de fichiers

Manipulations des vecteurs

Manipulation des chaînes

Les opérationsmathématiques

Pour aller plus loin

4.15

Déduction automatique de type

Le type auto

Afin d’alléger les notations lors de la manipulation desalgorithmes génériques, il est possible d’employer la déductionautomatique de type pour typer nos arguments. Ce typegénérique est déclaré le type "auto".

En pratique

auto est aussi très utile dans le parcours par intervalles etglobalement essentiel pour l’usage de la STL.

1 std : : f i l l ( a . begin ( ) , a . end ( ) , 33) ;2

3 i n t i { 0 } ;4 f o r ( auto& j : v )5 j = ++ i ;6

7 auto t { s td : : f i n d ( v . begin ( ) , v . end ( ) , 3) } ;8 i f ( t != v . end ( ) )9 std : : cout << ∗ t << std : : endl ;

Page 16: Compléments Chapitre 4lmb.univ-fcomte.fr/IMG/pdf/poo-chap4-beamer.pdf · 2018. 11. 7. · Compléments Buts et objectifs La librairie STD Organisation de la STL Utilisation générale

Compléments

Buts et objectifs

La librairie STDOrganisation de la STL

Utilisation générale

Cas concretsManipulation de fichiers

Manipulations des vecteurs

Manipulation des chaînes

Les opérationsmathématiques

Pour aller plus loin

4.16

Complément sur auto

La logique derrière auto

La raison de l’existence d’auto est la poursuite duraisonnement logique suivant :Lors d’une affectation, le type de la variable affectée est déjàdéfini explicitement par le type retourné par la partie de droitedu "=", pourquoi devoir le répéter à gauche?

Notion de rvalue et lvalue

On qualifie de "rvalue" ces types d’objet qui sont souvent destypes "retournés" par une instruction ou une fonction.On identifie de même par "lvalue" les objets pouvant êtremodifiés (et se trouvant donc à gauche du "=").

Ces notions sont très importantes dans les dernières normesC++ et sont nécessaires à leur bonne compréhension (ex : lesopérateurs de copie par déplacement et leur "&&" manipulentdes "rvalue reference")

Page 17: Compléments Chapitre 4lmb.univ-fcomte.fr/IMG/pdf/poo-chap4-beamer.pdf · 2018. 11. 7. · Compléments Buts et objectifs La librairie STD Organisation de la STL Utilisation générale

Compléments

Buts et objectifs

La librairie STDOrganisation de la STL

Utilisation générale

Cas concretsManipulation de fichiers

Manipulations des vecteurs

Manipulation des chaînes

Les opérationsmathématiques

Pour aller plus loin

4.17

1 La librairie STD

2 Cas concretsManipulation de fichiersManipulations des vecteursManipulation des chaînesLes opérations mathématiques

3 Pour aller plus loin

Page 18: Compléments Chapitre 4lmb.univ-fcomte.fr/IMG/pdf/poo-chap4-beamer.pdf · 2018. 11. 7. · Compléments Buts et objectifs La librairie STD Organisation de la STL Utilisation générale

Compléments

Buts et objectifs

La librairie STDOrganisation de la STL

Utilisation générale

Cas concretsManipulation de fichiers

Manipulations des vecteurs

Manipulation des chaînes

Les opérationsmathématiques

Pour aller plus loin

4.18

1 La librairie STD

2 Cas concretsManipulation de fichiersManipulations des vecteursManipulation des chaînesLes opérations mathématiques

3 Pour aller plus loin

Page 19: Compléments Chapitre 4lmb.univ-fcomte.fr/IMG/pdf/poo-chap4-beamer.pdf · 2018. 11. 7. · Compléments Buts et objectifs La librairie STD Organisation de la STL Utilisation générale

Compléments

Buts et objectifs

La librairie STDOrganisation de la STL

Utilisation générale

Cas concretsManipulation de fichiers

Manipulations des vecteurs

Manipulation des chaînes

Les opérationsmathématiques

Pour aller plus loin

4.19

Écrire dans un fichier

1 # inc lude <iostream >2 # inc lude <fstream >3 using namespace std ;4

5 i n t main ( ) {6 ofstream f i c h i e r ( " exemple . t x t " ) ;7 i f ( f i c h i e r . is_open ( ) )8 {9 f i c h i e r

10 << "Keep CALM and EAT c a n c o i l l o t t e "11 << endl ;12

13 f i c h i e r . c lose ( ) ;14 }15

16 r e t u r n 0 ;17 }

Page 20: Compléments Chapitre 4lmb.univ-fcomte.fr/IMG/pdf/poo-chap4-beamer.pdf · 2018. 11. 7. · Compléments Buts et objectifs La librairie STD Organisation de la STL Utilisation générale

Compléments

Buts et objectifs

La librairie STDOrganisation de la STL

Utilisation générale

Cas concretsManipulation de fichiers

Manipulations des vecteurs

Manipulation des chaînes

Les opérationsmathématiques

Pour aller plus loin

4.20

Lire un fichier

1 # inc lude <iostream >2 # inc lude <fstream >3 # inc lude < s t r i n g >4 using namespace std ;5

6 i n t main ( ) {7 s t r i n g l i g n e ;8 i f s t r eam f i c h i e r 2 ( " exemple . t x t " ) ;9 i f ( f i c h i e r 2 . is_open ( ) )

10 {11 whi le ( g e t l i n e ( f i c h i e r 2 , l i g n e ) )12 cout << l i g n e << endl ;13

14 f i c h i e r 2 . c lose ( ) ;15 }16

17 else cout << " Er reur d ’ ouver ture " ;18 }

Page 21: Compléments Chapitre 4lmb.univ-fcomte.fr/IMG/pdf/poo-chap4-beamer.pdf · 2018. 11. 7. · Compléments Buts et objectifs La librairie STD Organisation de la STL Utilisation générale

Compléments

Buts et objectifs

La librairie STDOrganisation de la STL

Utilisation générale

Cas concretsManipulation de fichiers

Manipulations des vecteurs

Manipulation des chaînes

Les opérationsmathématiques

Pour aller plus loin

4.21

Écrire des données dans un fichier1 # inc lude <iostream >2 # inc lude <fstream >3 # inc lude <array >4 # inc lude <a lgor i thm > / / t rans form5 # inc lude <numeric > / / i o t a6 # inc lude <iomanip >7 # inc lude < l i m i t s >8 using namespace std ;9

10 double f ( double x ) { r e t u r n (2 .5∗ x +3.6) / 3 ; }11

12 i n t main ( ) {13 array <double , 10> v ;14 i o t a ( v . begin ( ) , v . end ( ) , 1 .5 ) ; / / v [ 0 ]=1 . 5 e t v [ i +1]=v [ i ]+115 array <double , 10> w;16 t rans form ( v . begin ( ) , v . end ( ) , w. begin ( ) , f ) ;17

18 / / P rec i s ion max permet tant une repr exacte en base1019 auto prec_max { numer ic_ l im i t s <double > : : d i g i t s 1 0 } ;20

21 cout << " Prec is ion : " << prec_max << endl ;22 ofstream f i c h i e r ( " data . t x t " ) ;23 i f ( f i c h i e r . is_open ( ) )24 {25 f o r ( const auto& va l : w)26 f i c h i e r << s e t p r e c i s i o n ( prec_max ) << va l << endl ;27

28 f i c h i e r . c lose ( ) ;29 }30

31 r e t u r n 0 ; }

Page 22: Compléments Chapitre 4lmb.univ-fcomte.fr/IMG/pdf/poo-chap4-beamer.pdf · 2018. 11. 7. · Compléments Buts et objectifs La librairie STD Organisation de la STL Utilisation générale

Compléments

Buts et objectifs

La librairie STDOrganisation de la STL

Utilisation générale

Cas concretsManipulation de fichiers

Manipulations des vecteurs

Manipulation des chaînes

Les opérationsmathématiques

Pour aller plus loin

4.22

Lire des données d’un fichier

1 # inc lude <iostream >2 # inc lude <fstream >3 # inc lude <vector >4 using namespace std ;5

6 i n t main ( ) {7 vector <double > vx ;8 double x { 0 } ;9

10 i f s t r eam f i c h i e r 2 ( " data . t x t " ) ;11 i f ( f i c h i e r 2 . is_open ( ) )12 {13 whi le ( f i c h i e r 2 >> x )14 vx . push_back ( x ) ;15

16 f i c h i e r 2 . c lose ( ) ;17 }18

19 cout << "VX : " << endl ;20 f o r ( const auto& va l : vx )21 cout << va l << " " ;22 cout << endl ;23

24 r e t u r n 0 ;25 }

Page 23: Compléments Chapitre 4lmb.univ-fcomte.fr/IMG/pdf/poo-chap4-beamer.pdf · 2018. 11. 7. · Compléments Buts et objectifs La librairie STD Organisation de la STL Utilisation générale

Compléments

Buts et objectifs

La librairie STDOrganisation de la STL

Utilisation générale

Cas concretsManipulation de fichiers

Manipulations des vecteurs

Manipulation des chaînes

Les opérationsmathématiques

Pour aller plus loin

4.23

1 La librairie STD

2 Cas concretsManipulation de fichiersManipulations des vecteursManipulation des chaînesLes opérations mathématiques

3 Pour aller plus loin

Page 24: Compléments Chapitre 4lmb.univ-fcomte.fr/IMG/pdf/poo-chap4-beamer.pdf · 2018. 11. 7. · Compléments Buts et objectifs La librairie STD Organisation de la STL Utilisation générale

Compléments

Buts et objectifs

La librairie STDOrganisation de la STL

Utilisation générale

Cas concretsManipulation de fichiers

Manipulations des vecteurs

Manipulation des chaînes

Les opérationsmathématiques

Pour aller plus loin

4.24

Matrice avec std : :vector

1 # inc lude <vector >2 # inc lude <iostream >3 using namespace std ;4

5 i n t main ( ) {6 vector <vector <double >> v {5 , vector <double >(3 ,0) } ;7 / / A t ten t i on , observer d i f f e r e n c e avec :8 / / v {5 , vector <double > { 3 , 0 } } ;9

10 i n t i { 0 } ;11 f o r ( auto& va l : v )12 va l [ 0 ] = ++ i ;13

14 / / Observer les i nd i ces dans l a mat r ice15 f o r ( s i z e _ t i =0; i < v . s ize ( ) ; ++ i )16 {17 f o r ( s i z e _ t j =0; j < v [ i ] . s i ze ( ) ; ++ j )18 cout << v [ i ] [ j ] << " " ;19 cout << endl ;20 }21

22 r e t u r n 0 ;23 }

Page 25: Compléments Chapitre 4lmb.univ-fcomte.fr/IMG/pdf/poo-chap4-beamer.pdf · 2018. 11. 7. · Compléments Buts et objectifs La librairie STD Organisation de la STL Utilisation générale

Compléments

Buts et objectifs

La librairie STDOrganisation de la STL

Utilisation générale

Cas concretsManipulation de fichiers

Manipulations des vecteurs

Manipulation des chaînes

Les opérationsmathématiques

Pour aller plus loin

4.25

Manipulations des conteneurs (dont vector)

1 # inc lude <vector >2 # inc lude <iostream >3 using namespace std ;4

5 i n t main ( ) {6 double a { 1 8 } ;7 vector <double > v1 ; / / v ide8 vector <double > v2 { vector <double > { } } ; / / copy−c s t r sur vec v ide9 vector <double > v3 (10) ; / / 10 elements i n i t i a l i s e s par defaut

10 vector <double > v4 (5 , a ) ; / / 5 elements i n i t i a l i s e s par copy de a11 vector <double > v5 {5 , a } ; / / i n i t par l i s t e d ’ element : [ 5 , 18]12 vector <double > v6 {5 , 6 , 7 , 8 } ; / / [ 5 , 6 , 7 , 8 ]13 vector <double > v7 { v3 . begin ( ) , v3 . begin ( ) +5 } ; / / 5 1er elem de v314

15 vector <double >∗ pv = n u l l p t r ;16 pv = new vector <double >{ v3 . begin ( ) +3 , v3 . end ( ) −3};17 f o r ( auto& va l : ∗pv )18 cout << va l << " " ;19 cout << endl ;20

21 pv−>push_back ( 5 ) ; pv−>push_back ( 6 ) ; pv−>pop_back ( ) ;22 cout << pv−>f r o n t ( ) << " \ t "23 << pv−>back ( ) << endl << endl ;24

25 f o r ( i n t i =0; i < pv−>s ize ( ) ; ++ i )26 cout << pv−>at ( i ) << " " ; / / O b l i g a t o i r e pour acces par

po in teu r27 cout << endl ;28

29 r e t u r n 0 ; }

Page 26: Compléments Chapitre 4lmb.univ-fcomte.fr/IMG/pdf/poo-chap4-beamer.pdf · 2018. 11. 7. · Compléments Buts et objectifs La librairie STD Organisation de la STL Utilisation générale

Compléments

Buts et objectifs

La librairie STDOrganisation de la STL

Utilisation générale

Cas concretsManipulation de fichiers

Manipulations des vecteurs

Manipulation des chaînes

Les opérationsmathématiques

Pour aller plus loin

4.26

1 La librairie STD

2 Cas concretsManipulation de fichiersManipulations des vecteursManipulation des chaînesLes opérations mathématiques

3 Pour aller plus loin

Page 27: Compléments Chapitre 4lmb.univ-fcomte.fr/IMG/pdf/poo-chap4-beamer.pdf · 2018. 11. 7. · Compléments Buts et objectifs La librairie STD Organisation de la STL Utilisation générale

Compléments

Buts et objectifs

La librairie STDOrganisation de la STL

Utilisation générale

Cas concretsManipulation de fichiers

Manipulations des vecteurs

Manipulation des chaînes

Les opérationsmathématiques

Pour aller plus loin

4.27

Utilisation de std : :string

1 # inc lude < s t r i n g >2 # inc lude <iostream >3 # inc lude <a lgor i thm >4 using namespace std ;5

6 i n t main ( ) {7 s t r i n g s { " In C a n c o i l l o t t e we t r u s t ! " } ;8 s t r i n g s2 { " Or not . . . " } ;9

10 s t r i n g s3 = s + " " + s2 ;11

12 const char∗ cs = s3 . c_s t r ( ) ;13

14 cout << s3 << endl << cs << endl ; ;15

16 s t r i n g pa t t e rn { " C a n c o i l l o t t e " } ;17 s t r i n g fromage { "Comte " } ;18 s i z e _ t plus_grand = max( pa t t e rn . s ize ( ) , fromage . leng th ( ) ) ;19

20 auto pos = s . f i n d ( pa t t e rn ) ;21 s . rep lace ( pos , plus_grand , fromage ) ;22 cout << s << endl ;23

24 r e t u r n 0 ;25 }

Page 28: Compléments Chapitre 4lmb.univ-fcomte.fr/IMG/pdf/poo-chap4-beamer.pdf · 2018. 11. 7. · Compléments Buts et objectifs La librairie STD Organisation de la STL Utilisation générale

Compléments

Buts et objectifs

La librairie STDOrganisation de la STL

Utilisation générale

Cas concretsManipulation de fichiers

Manipulations des vecteurs

Manipulation des chaînes

Les opérationsmathématiques

Pour aller plus loin

4.28

Conversion entre string et nombres

1 # inc lude < s t r i n g >2 # inc lude <iostream >3 # inc lude <iomanip >4 using namespace std ;5

6 i n t main ( ) {7 / / s t r i n g −> numerics8 s t r i n g sz = " 3.1415 " ;9 s t r i n g sz1 { sz } ;

10

11 sz1 += " 9265 " ;12

13 double z1 = stod ( sz1 ) ; / / s t r i n g to double ( s t o i ( ) pour i n t )14

15 cout << sz1 << " : " << s e t p r e c i s i o n (12) << z1 << endl ;16

17 / / A t t e n t i o n a l a p r e c i s i o n de l a convers ion !18 double z2 = stod ( sz ) ;19 s t r i n g sz2 = t o _ s t r i n g ( z2 ) ;20 cout << sz2 << " : " << s e t p r e c i s i o n (12) << z2 << endl ;21

22 r e t u r n 0 ;23 }

Page 29: Compléments Chapitre 4lmb.univ-fcomte.fr/IMG/pdf/poo-chap4-beamer.pdf · 2018. 11. 7. · Compléments Buts et objectifs La librairie STD Organisation de la STL Utilisation générale

Compléments

Buts et objectifs

La librairie STDOrganisation de la STL

Utilisation générale

Cas concretsManipulation de fichiers

Manipulations des vecteurs

Manipulation des chaînes

Les opérationsmathématiques

Pour aller plus loin

4.29

1 La librairie STD

2 Cas concretsManipulation de fichiersManipulations des vecteursManipulation des chaînesLes opérations mathématiques

3 Pour aller plus loin

Page 30: Compléments Chapitre 4lmb.univ-fcomte.fr/IMG/pdf/poo-chap4-beamer.pdf · 2018. 11. 7. · Compléments Buts et objectifs La librairie STD Organisation de la STL Utilisation générale

Compléments

Buts et objectifs

La librairie STDOrganisation de la STL

Utilisation générale

Cas concretsManipulation de fichiers

Manipulations des vecteurs

Manipulation des chaînes

Les opérationsmathématiques

Pour aller plus loin

4.30

Exemples de fonctions usuelles1 # inc lude <cmath>2 # inc lude <complex>3 # inc lude <iostream >4 using namespace std ;5

6 i n t main ( ) {7 double a{−5.123};8 cout << " abso lu te value : \ t " << abs ( a ) << endl ;9 cout << " b igges t i n f : \ t " << f l o o r ( a ) << endl ;

10 cout << " sma l les t sup : \ t " << c e i l ( a ) << endl ;11 cout << " a r rond i : \ t " << round ( a ) << endl ;12

13 cout << " cos : \ t " << cos ( a ) << endl ;14 cout << " acos : \ t " << acos(−1) << endl ;15 cout << " cosh : \ t " << cosh ( a ) << endl ;16

17 double b = pow( a , 4) ;18 cout << " puissance : \ t " << pow( a , 4) << endl ;19 cout << " rac ine : \ t " << s q r t ( abs ( b ) ) << endl ;20 cout << " exp : \ t " << exp ( a ) << endl ;21 cout << " log nep : \ t " << log ( b ) << endl ;22 cout << " log 1 0 : \ t " << log10 ( b ) << endl ;23

24 complex<double > z { a , b } ;25 cout << " Complex : \ t " << z << endl ;26 cout << " p a r t i e r e e l l e : \ t " << r e a l ( z ) << endl ;27 cout << " p a r t i e imag ina i re : \ t " << imag ( z ) << endl ;28 cout << " norme : \ t " << norm ( z ) << endl ;29 cout << " conjugue : \ t " << conj ( z ) << endl ;30 cout << " exp : \ t " << exp ( z ) << endl ; / / e t f o n c t i o n s usue l les31 }

Page 31: Compléments Chapitre 4lmb.univ-fcomte.fr/IMG/pdf/poo-chap4-beamer.pdf · 2018. 11. 7. · Compléments Buts et objectifs La librairie STD Organisation de la STL Utilisation générale

Compléments

Buts et objectifs

La librairie STDOrganisation de la STL

Utilisation générale

Cas concretsManipulation de fichiers

Manipulations des vecteurs

Manipulation des chaînes

Les opérationsmathématiques

Pour aller plus loin

4.31

Exemples de fonctions sur conteneurs

1 # inc lude <vector >2 # inc lude <iostream >3 # inc lude <numeric >4 using namespace std ;5

6 template <c lass T>7 vo id p r i n t ( const vector <T> v )8 {9 f o r ( const auto& va l : v )

10 cout << va l << " " ;11 cout << endl ;12 }13

14 double f ( double x , double y ) { r e t u r n 2∗x+3∗y ; }15

16 i n t main ( ) {17 vector <double > v (10 , 0) ;18 i o t a ( v . begin ( ) , v . end ( ) , −5) ;19 p r i n t ( v ) ;20

21 i n t res { 0 } ;22 cout << accumulate ( v . begin ( ) , v . begin ( ) +3 , res ) << endl ;23

24 vector <double > w(10) ;25 par t ia l_sum ( v . begin ( ) , v . end ( ) , w. begin ( ) ) ;26 p r i n t (w) ;27 /∗ a su i v re ∗ /

Page 32: Compléments Chapitre 4lmb.univ-fcomte.fr/IMG/pdf/poo-chap4-beamer.pdf · 2018. 11. 7. · Compléments Buts et objectifs La librairie STD Organisation de la STL Utilisation générale

Compléments

Buts et objectifs

La librairie STDOrganisation de la STL

Utilisation générale

Cas concretsManipulation de fichiers

Manipulations des vecteurs

Manipulation des chaînes

Les opérationsmathématiques

Pour aller plus loin

4.32

Exemples de fonctions sur conteneurs (suite)

28 /∗ s u i t e ∗ /29

30 vector <double > x1 {0 , 1 , 2 , 3 } ;31 vector <double > x2 {1 , 0 , 2 , 4 } ;32 cout << inner_produc t ( x1 . begin ( ) , x1 . end ( ) ,33 x2 . begin ( ) ,34 0)35 << endl ;36

37 / / p o s s i b i l i t e de changer l ’ operateur38 cout << accumulate ( v . begin ( ) , v . begin ( ) +3 , res , f ) << endl ;39

40 par t ia l_sum ( v . begin ( ) , v . end ( ) , w. begin ( ) , f ) ;41 p r i n t (w) ;42

43 ad jacen t_d i f f e rence ( v . begin ( ) +1 , v . end ( ) ,44 w. begin ( ) ,45 f ) ;46 p r i n t (w) ;47

48 cout << inner_produc t ( x1 . begin ( ) , x1 . end ( ) ,49 x2 . begin ( ) ,50 0 ,51 f , f )52 << endl ;53

54 r e t u r n 0 ;55 }

Page 33: Compléments Chapitre 4lmb.univ-fcomte.fr/IMG/pdf/poo-chap4-beamer.pdf · 2018. 11. 7. · Compléments Buts et objectifs La librairie STD Organisation de la STL Utilisation générale

Compléments

Buts et objectifs

La librairie STDOrganisation de la STL

Utilisation générale

Cas concretsManipulation de fichiers

Manipulations des vecteurs

Manipulation des chaînes

Les opérationsmathématiques

Pour aller plus loin

4.33

La génération aléatoire

1 # inc lude <random>2 # inc lude <iostream >3 # inc lude <vector >4 # inc lude < f u n c t i o n a l > / / b ind ( )5 using namespace std ;6

7 i n t main ( ) {8 random_device rd ; / / r e a l random ( pour l e ’ seed ’ )9 auto seed { rd ( ) } ;

10 using my_gen = default_random_engine ; / / pseudo random11 using my_d is t r i b = u n i f o r m _ i n t _ d i s t r i b u t i o n < >;12

13 my_gen rg { seed } ;14 my_d is t r i b un_a_six {1 , 6 } ;15 auto t e s t = un_a_six ( rg ) ;16 / / ou p lus propre :17 auto d6 = bind ( un_a_six , rg ) ;18

19 vector < i n t > DDstats ( 6 ) ;20 f o r ( auto& va l : DDstats )21 va l = 8+d6 ( ) +d6 ( ) ;22

23 f o r ( const auto& va l : DDstats )24 cout << va l << " " ;25 cout << endl ;26

27 r e t u r n 0 ;28 }

Page 34: Compléments Chapitre 4lmb.univ-fcomte.fr/IMG/pdf/poo-chap4-beamer.pdf · 2018. 11. 7. · Compléments Buts et objectifs La librairie STD Organisation de la STL Utilisation générale

Compléments

Buts et objectifs

La librairie STDOrganisation de la STL

Utilisation générale

Cas concretsManipulation de fichiers

Manipulations des vecteurs

Manipulation des chaînes

Les opérationsmathématiques

Pour aller plus loin

4.34

La génération aléatoire - Plus complexe 1

1 # inc lude <iostream >2 # inc lude <iomanip >3 # inc lude < s t r i n g >4 # inc lude <map>5 # inc lude <random>6 # inc lude <cmath>7

8 i n t main ( )9 {

10 / / Etape 1 : t i r a g e a l e a t o i r e d ’ une moyenne11 / / 1−1 Recuperer un seed vra iment a l e a t o i r e12 std : : random_device rd ;13 auto seed1 { rd ( ) } ;14

15 / / 1−2 Generateur d ’ e n t i e r uni forme sur [ 1 , 6 ]16 std : : default_random_engine e1 ( seed1 ) ;17 std : : u n i f o r m _ i n t _ d i s t r i b u t i o n < i n t > un i f o rm_d i s t (1 , 6) ;18

19 / / 1−2 Tirage a l e a t o i r e d ’ une moyenne20 i n t mean = un i f o rm_d i s t ( e1 ) ;21 std : : cout << " Randomly−chosen mean : " << mean << std : : endl ;22

23 / / Etape 2 Loi normale centrée sur l a moyenne t i r e e24 / / Generateur selon l o i normale de f l o t t a n t25 / / moyenne = ’mean ’ , d e v i a t i o n s td = 226 std : : seed_seq seed2 { rd ( ) } ;27 std : : mt19937 e2 ( seed2 ) ;28 std : : n o r m a l _ d i s t r i b u t i o n <> normal_d is t (mean , 2)

1. http://en.cppreference.com/w/cpp/numeric/random

Page 35: Compléments Chapitre 4lmb.univ-fcomte.fr/IMG/pdf/poo-chap4-beamer.pdf · 2018. 11. 7. · Compléments Buts et objectifs La librairie STD Organisation de la STL Utilisation générale

Compléments

Buts et objectifs

La librairie STDOrganisation de la STL

Utilisation générale

Cas concretsManipulation de fichiers

Manipulations des vecteurs

Manipulation des chaînes

Les opérationsmathématiques

Pour aller plus loin

4.35

La génération aléatoire - Plus complexe (suite)

29

30 / / Etape 3 Rea l i sa t i ons31 / / Generat ion de 10000 t i r a g e s32 / / Creat ion d ’ un histogramme dans une map33 / / format : ( va leur a l e a t o i r e : nb de t i r a g e )34 std : : map< i n t , i n t > h i s t ;35 f o r ( i n t n = 0; n < 10000; ++n ) {36 ++ h i s t [ s td : : round ( normal_d is t ( e2 ) ) ] ;37 }38

39 / / Etape 4 Af f i chage ( j o l i )40 std : : cout << " Normal d i s t r i b u t i o n around " << mean << " : \ n " ;41 f o r ( auto p : h i s t ) {42 s td : : cout << std : : f i x e d << std : : s e t p r e c i s i o n ( 1 )43 << std : : setw ( 2 )44 << p . f i r s t << ’ ’45 << std : : s t r i n g ( p . second /200 , ’∗ ’ ) << std : : endl ;46 }47 }

Extraits des distributions disponibles :• Uniforme (entier et réel)• Bernouilli (binomiale, negative binomiale, géométrique)• Poisson (expo, gamma, Weibull, valeurs extrêmes)• Normale (log, chi 2, Cauchy, Fisher, Student)• Échantillonnage (discret, constant ou linéaire par morceaux)

Page 36: Compléments Chapitre 4lmb.univ-fcomte.fr/IMG/pdf/poo-chap4-beamer.pdf · 2018. 11. 7. · Compléments Buts et objectifs La librairie STD Organisation de la STL Utilisation générale

Compléments

Buts et objectifs

La librairie STDOrganisation de la STL

Utilisation générale

Cas concretsManipulation de fichiers

Manipulations des vecteurs

Manipulation des chaînes

Les opérationsmathématiques

Pour aller plus loin

4.36

1 La librairie STD

2 Cas concrets

3 Pour aller plus loin

Page 37: Compléments Chapitre 4lmb.univ-fcomte.fr/IMG/pdf/poo-chap4-beamer.pdf · 2018. 11. 7. · Compléments Buts et objectifs La librairie STD Organisation de la STL Utilisation générale

Compléments

Buts et objectifs

La librairie STDOrganisation de la STL

Utilisation générale

Cas concretsManipulation de fichiers

Manipulations des vecteurs

Manipulation des chaînes

Les opérationsmathématiques

Pour aller plus loin

4.37

Notions complémentaires

Le langage C++ est très riche et la bibliothèque standard estbien plus large que ce que nous avons couvert. Entres autresles notions principale non abordées sont :• Les pointeurs intelligents ("smart pointers") de la STL

Gèrent le partage d’instance d’objets entre plusieurspropriétaires et supprime une grande partie des problèmes liés àla destruction de l’instance.

• Le transtypage ("cast") de la STLExtension du "cast" simple (conversion) vu précédemment avecprise en compte des pointeurs et de l’héritage.

• Fonctions variadiques ("variadic functions")Possibilité de prendre un nombre non défini d’argument.

• Fonctions anonymes ("lambda functions")Définition sans déclaration de fonctions « là où on en a besoin »,très utile en argument des algorithmes de la STL.

• Gestion des erreurs ("exceptions")Possibilité de gérer les erreurs de fonctionnement du code et depoursuivre l’exécution.