• Aucun résultat trouvé

[PDF] Cours de C++ : Les templates et la STL | Cours informatique

N/A
N/A
Protected

Academic year: 2021

Partager "[PDF] Cours de C++ : Les templates et la STL | Cours informatique"

Copied!
80
0
0

Texte intégral

(1)

Les templates API STL Les liens

Cours de C++

Les templates et la STL Gauthier Quesnel quesnel@lil.univ-littoral.fr Laboratoire d’Informatique du Littoral

3 avril 2006

(2)

Les templates API STL Les liens 1 Les templates La philosophie Exemples simples 2 API STL

Les chaînes de caractères Les tableaux

Les listes chaînées : std::list Les conteneurs évolués

(3)

Les templates API STL Les liens La philosophie Exemples simples

Plan

1 Les templates La philosophie Exemples simples 2 API STL

Les chaînes de caractères Les tableaux

Les listes chaînées : std::list Les conteneurs évolués 3 Les liens

(4)

Les templates API STL Les liens La philosophie Exemples simples

Les templates

La philosophie du couper/remplacer : Example 1 t e m p l a t e < c l a s s C > 2 std :: s t r i n g t o _ s t r i n g ( c o n s t C & c ) 3 { 4 std :: o s t r i n g s t r e a m o ; 5 o < < c ; 6 r e t u r n o . str (); 7 } 8 9 std :: s t r i n g t o _ s t r i n g < d o u b l e > ( 3 . 1 2 3 3 ) ; 10 std :: s t r i n g t o _ s t r i n g < i n t >(3); 11 std :: s t r i n g t o _ s t r i n g < b o o l >( t r u e ); 12 std :: s t r i n g t o _ s t r i n g ( 2 . 1 2 3 0 8 ) ;

(5)

Les templates API STL Les liens La philosophie Exemples simples

Les templates

La philosophie du couper/remplacer : Example 1 t e m p l a t e < c l a s s C > 2 std :: s t r i n g t o _ s t r i n g ( c o n s t C & c ) 3 { 4 std :: o s t r i n g s t r e a m o ; 5 o < < c ; 6 r e t u r n o . str (); 7 } 8 9 std :: s t r i n g t o _ s t r i n g < d o u b l e > ( 3 . 1 2 3 3 ) ; 10 std :: s t r i n g t o _ s t r i n g < i n t >(3); 11 std :: s t r i n g t o _ s t r i n g < b o o l >( t r u e ); 12 std :: s t r i n g t o _ s t r i n g ( 2 . 1 2 3 0 8 ) ;

(6)

Les templates API STL Les liens La philosophie Exemples simples

Les templates

Remplace le template par la donnée :

Example 1 std :: s t r i n g t o _ s t r i n g < d o u b l e > ( 3 . 1 2 3 3 ) ; 2 3 // Est é q u i v a l e n t à : 4 5 std :: s t r i n g t o _ s t r i n g ( c o n s t d o u b l e& c ) 6 { 7 std :: o s t r i n g s t r e a m o ; 8 o < < c ; 9 r e t u r n o . str (); 10 }

(7)

Les templates API STL Les liens La philosophie Exemples simples

Les templates

Remplace le template par la donnée :

Example 1 std :: s t r i n g t o _ s t r i n g < d o u b l e > ( 3 . 1 2 3 3 ) ; 2 3 // Est é q u i v a l e n t à : 4 5 std :: s t r i n g t o _ s t r i n g ( c o n s t d o u b l e& c ) 6 { 7 std :: o s t r i n g s t r e a m o ; 8 o < < c ; 9 r e t u r n o . str (); 10 }

(8)

Les templates API STL Les liens La philosophie Exemples simples

Plan

1 Les templates La philosophie Exemples simples 2 API STL

Les chaînes de caractères Les tableaux

Les listes chaînées : std::list Les conteneurs évolués 3 Les liens

(9)

Les templates API STL Les liens La philosophie Exemples simples

Les templates

Les templates : programmation générique en français.

Les types fournis au template peuvent être des types simples, des classes ou même des fonctions.

Example

1 std :: v e c t o r < i n t > tab (100 , 0);

2 std :: g e n e r a t e ( tab . b e g i n () , tab . end () , r a n d );

3 4 // la f o n c t i o n d a n s l ’ API C ++ : 5 t e m p l a t e < t y p e n a m e _ F o r w a r d I t e r a t o r , t y p e n a m e _ G e n e r a t o r > 6 v o i d std :: g e n e r a t e ( _ F o r w a r d I t e r a t o r _ _f i r s t , 7 _ F o r w a r d I t e r a t o r __last , 8 _ G e n e r a t o r _ _ g e n ) 9 { 10 f o r (; _ _ f i r s t != _ _ l a s t ; ++ _ _ f i r s t ) 11 * _ _ f i r s t = _ _ g e n (); 12 }

(10)

Les templates API STL Les liens La philosophie Exemples simples

Les templates

Les templates : programmation générique en français. Les types fournis au template peuvent être des types simples, des classes ou même des fonctions.

Example

1 std :: v e c t o r < i n t > tab (100 , 0);

2 std :: g e n e r a t e ( tab . b e g i n () , tab . end () , r a n d );

3 4 // la f o n c t i o n d a n s l ’ API C ++ : 5 t e m p l a t e < t y p e n a m e _ F o r w a r d I t e r a t o r , t y p e n a m e _ G e n e r a t o r > 6 v o i d std :: g e n e r a t e ( _ F o r w a r d I t e r a t o r _ _f i r s t , 7 _ F o r w a r d I t e r a t o r __last , 8 _ G e n e r a t o r _ _ g e n ) 9 { 10 f o r (; _ _ f i r s t != _ _ l a s t ; ++ _ _ f i r s t ) 11 * _ _ f i r s t = _ _ g e n (); 12 }

(11)

Les templates API STL Les liens La philosophie Exemples simples

Les templates

Les templates : programmation générique en français. Les types fournis au template peuvent être des types simples, des classes ou même des fonctions.

Example

1 std :: v e c t o r < i n t > tab (100 , 0);

2 std :: g e n e r a t e ( tab . b e g i n () , tab . end () , r a n d );

3 4 // la f o n c t i o n d a n s l ’ API C ++ : 5 t e m p l a t e < t y p e n a m e _ F o r w a r d I t e r a t o r , t y p e n a m e _ G e n e r a t o r > 6 v o i d std :: g e n e r a t e ( _ F o r w a r d I t e r a t o r _ _f i r s t , 7 _ F o r w a r d I t e r a t o r __last , 8 _ G e n e r a t o r _ _ g e n ) 9 { 10 f o r (; _ _ f i r s t != _ _ l a s t ; ++ _ _ f i r s t ) 11 * _ _ f i r s t = _ _ g e n (); 12 }

(12)

Les templates

API STL

Les liens

Les chaînes de caractères Les tableaux

Les listes chaînées : std::list Les conteneurs évolués

Standard Template Library

Une partie très importante du langage C++ : la STL (Standard Template Library)

La STL propose un grand nombre d’éléments :

des structures de données, tableaux, listes chaînes, piles. des algorithmes de recherches, suppression, de tas.

Il existe principalement trois types d’éléments :

les conteneurs : stockent les données. les itérateurs : parcourent les conteneurs.

les algorithmes : travaillent sur les conteneurs à partir des itérateurs.

(13)

Les templates

API STL

Les liens

Les chaînes de caractères Les tableaux

Les listes chaînées : std::list Les conteneurs évolués

Standard Template Library

Une partie très importante du langage C++ : la STL (Standard Template Library)

La STL propose un grand nombre d’éléments :

des structures de données, tableaux, listes chaînes, piles. des algorithmes de recherches, suppression, de tas.

Il existe principalement trois types d’éléments :

les conteneurs : stockent les données. les itérateurs : parcourent les conteneurs.

les algorithmes : travaillent sur les conteneurs à partir des itérateurs.

(14)

Les templates

API STL

Les liens

Les chaînes de caractères Les tableaux

Les listes chaînées : std::list Les conteneurs évolués

Standard Template Library

Une partie très importante du langage C++ : la STL (Standard Template Library)

La STL propose un grand nombre d’éléments :

des structures de données, tableaux, listes chaînes, piles.

des algorithmes de recherches, suppression, de tas.

Il existe principalement trois types d’éléments :

les conteneurs : stockent les données. les itérateurs : parcourent les conteneurs.

les algorithmes : travaillent sur les conteneurs à partir des itérateurs.

(15)

Les templates

API STL

Les liens

Les chaînes de caractères Les tableaux

Les listes chaînées : std::list Les conteneurs évolués

Standard Template Library

Une partie très importante du langage C++ : la STL (Standard Template Library)

La STL propose un grand nombre d’éléments :

des structures de données, tableaux, listes chaînes, piles. des algorithmes de recherches, suppression, de tas.

Il existe principalement trois types d’éléments :

les conteneurs : stockent les données. les itérateurs : parcourent les conteneurs.

les algorithmes : travaillent sur les conteneurs à partir des itérateurs.

(16)

Les templates

API STL

Les liens

Les chaînes de caractères Les tableaux

Les listes chaînées : std::list Les conteneurs évolués

Standard Template Library

Une partie très importante du langage C++ : la STL (Standard Template Library)

La STL propose un grand nombre d’éléments :

des structures de données, tableaux, listes chaînes, piles. des algorithmes de recherches, suppression, de tas.

Il existe principalement trois types d’éléments :

les conteneurs : stockent les données. les itérateurs : parcourent les conteneurs.

les algorithmes : travaillent sur les conteneurs à partir des itérateurs.

(17)

Les templates

API STL

Les liens

Les chaînes de caractères Les tableaux

Les listes chaînées : std::list Les conteneurs évolués

Standard Template Library

Une partie très importante du langage C++ : la STL (Standard Template Library)

La STL propose un grand nombre d’éléments :

des structures de données, tableaux, listes chaînes, piles. des algorithmes de recherches, suppression, de tas.

Il existe principalement trois types d’éléments :

les conteneurs : stockent les données.

les itérateurs : parcourent les conteneurs.

les algorithmes : travaillent sur les conteneurs à partir des itérateurs.

(18)

Les templates

API STL

Les liens

Les chaînes de caractères Les tableaux

Les listes chaînées : std::list Les conteneurs évolués

Standard Template Library

Une partie très importante du langage C++ : la STL (Standard Template Library)

La STL propose un grand nombre d’éléments :

des structures de données, tableaux, listes chaînes, piles. des algorithmes de recherches, suppression, de tas.

Il existe principalement trois types d’éléments :

les conteneurs : stockent les données. les itérateurs : parcourent les conteneurs.

les algorithmes : travaillent sur les conteneurs à partir des itérateurs.

(19)

Les templates

API STL

Les liens

Les chaînes de caractères Les tableaux

Les listes chaînées : std::list Les conteneurs évolués

Standard Template Library

Une partie très importante du langage C++ : la STL (Standard Template Library)

La STL propose un grand nombre d’éléments :

des structures de données, tableaux, listes chaînes, piles. des algorithmes de recherches, suppression, de tas.

Il existe principalement trois types d’éléments :

les conteneurs : stockent les données. les itérateurs : parcourent les conteneurs.

les algorithmes : travaillent sur les conteneurs à partir des itérateurs.

(20)

Les templates

API STL

Les liens

Les chaînes de caractères Les tableaux

Les listes chaînées : std::list Les conteneurs évolués

Les conteneurs

Les conteneurs permettent de contenir des éléments : la généricité paramétrera le type des éléments à utiliser.

Plusieurs types de conteneurs sont utilisables : les tableaux, classes vectoret deque, les listeslist, les pilesstack, lesqueue,

les ensembles set, les ensembles multiplesmultiset, les cartes

map et les multicartes multimap.

Il n’y a pas de classe générique de base (classe Object du java), par exemple). Cette option aurait pu être intéressante sur bien des aspects, mais il ne faut jamais oublier que l’un des buts fondamentaux de la librairie STL est d’être la plus rapide possible (et la liaison dynamique à un coup).

(21)

Les templates

API STL

Les liens

Les chaînes de caractères Les tableaux

Les listes chaînées : std::list Les conteneurs évolués

Les conteneurs

Les conteneurs permettent de contenir des éléments : la généricité paramétrera le type des éléments à utiliser. Plusieurs types de conteneurs sont utilisables : les tableaux, classes vectoret deque, les listeslist, les pilesstack, lesqueue,

les ensembles set, les ensembles multiplesmultiset, les cartes

map et les multicartes multimap.

Il n’y a pas de classe générique de base (classe Object du java), par exemple). Cette option aurait pu être intéressante sur bien des aspects, mais il ne faut jamais oublier que l’un des buts fondamentaux de la librairie STL est d’être la plus rapide possible (et la liaison dynamique à un coup).

(22)

Les templates

API STL

Les liens

Les chaînes de caractères Les tableaux

Les listes chaînées : std::list Les conteneurs évolués

Les conteneurs

Les conteneurs permettent de contenir des éléments : la généricité paramétrera le type des éléments à utiliser. Plusieurs types de conteneurs sont utilisables : les tableaux, classes vectoret deque, les listeslist, les pilesstack, lesqueue,

les ensembles set, les ensembles multiplesmultiset, les cartes

map et les multicartes multimap.

Il n’y a pas de classe générique de base (classe Object du java), par exemple). Cette option aurait pu être intéressante sur bien des aspects, mais il ne faut jamais oublier que l’un des buts fondamentaux de la librairie STL est d’être la plus rapide possible (et la liaison dynamique à un coup).

(23)

Les templates

API STL

Les liens

Les chaînes de caractères Les tableaux

Les listes chaînées : std::list Les conteneurs évolués

Les itérateurs

Les itérateurs sont fondamentaux dans la STL !

Ils en existent de plusieurs types :

Accès aléatoires : tableaux.

Accès linéaires : les listes, les maps, les tableaux. etc.

Ils permettent de manipuler les conteneurs de manière transparente.

Un itérateur peut-être vu comme un pointeur sur un élément d’un conteneur.

Par définition, un itérateur permet de récupérer une donnée (pour la manipuler) et de passer à la suivante pour mettre en place l’itération.

(24)

Les templates

API STL

Les liens

Les chaînes de caractères Les tableaux

Les listes chaînées : std::list Les conteneurs évolués

Les itérateurs

Les itérateurs sont fondamentaux dans la STL ! Ils en existent de plusieurs types :

Accès aléatoires : tableaux.

Accès linéaires : les listes, les maps, les tableaux. etc.

Ils permettent de manipuler les conteneurs de manière transparente.

Un itérateur peut-être vu comme un pointeur sur un élément d’un conteneur.

Par définition, un itérateur permet de récupérer une donnée (pour la manipuler) et de passer à la suivante pour mettre en place l’itération.

(25)

Les templates

API STL

Les liens

Les chaînes de caractères Les tableaux

Les listes chaînées : std::list Les conteneurs évolués

Les itérateurs

Les itérateurs sont fondamentaux dans la STL ! Ils en existent de plusieurs types :

Accès aléatoires : tableaux.

Accès linéaires : les listes, les maps, les tableaux. etc.

Ils permettent de manipuler les conteneurs de manière transparente.

Un itérateur peut-être vu comme un pointeur sur un élément d’un conteneur.

Par définition, un itérateur permet de récupérer une donnée (pour la manipuler) et de passer à la suivante pour mettre en place l’itération.

(26)

Les templates

API STL

Les liens

Les chaînes de caractères Les tableaux

Les listes chaînées : std::list Les conteneurs évolués

Les itérateurs

Les itérateurs sont fondamentaux dans la STL ! Ils en existent de plusieurs types :

Accès aléatoires : tableaux.

Accès linéaires : les listes, les maps, les tableaux.

etc.

Ils permettent de manipuler les conteneurs de manière transparente.

Un itérateur peut-être vu comme un pointeur sur un élément d’un conteneur.

Par définition, un itérateur permet de récupérer une donnée (pour la manipuler) et de passer à la suivante pour mettre en place l’itération.

(27)

Les templates

API STL

Les liens

Les chaînes de caractères Les tableaux

Les listes chaînées : std::list Les conteneurs évolués

Les itérateurs

Les itérateurs sont fondamentaux dans la STL ! Ils en existent de plusieurs types :

Accès aléatoires : tableaux.

Accès linéaires : les listes, les maps, les tableaux. etc.

Ils permettent de manipuler les conteneurs de manière transparente.

Un itérateur peut-être vu comme un pointeur sur un élément d’un conteneur.

Par définition, un itérateur permet de récupérer une donnée (pour la manipuler) et de passer à la suivante pour mettre en place l’itération.

(28)

Les templates

API STL

Les liens

Les chaînes de caractères Les tableaux

Les listes chaînées : std::list Les conteneurs évolués

Les itérateurs

Les itérateurs sont fondamentaux dans la STL ! Ils en existent de plusieurs types :

Accès aléatoires : tableaux.

Accès linéaires : les listes, les maps, les tableaux. etc.

Ils permettent de manipuler les conteneurs de manière transparente.

Un itérateur peut-être vu comme un pointeur sur un élément d’un conteneur.

Par définition, un itérateur permet de récupérer une donnée (pour la manipuler) et de passer à la suivante pour mettre en place l’itération.

(29)

Les templates

API STL

Les liens

Les chaînes de caractères Les tableaux

Les listes chaînées : std::list Les conteneurs évolués

Les itérateurs

Les itérateurs sont fondamentaux dans la STL ! Ils en existent de plusieurs types :

Accès aléatoires : tableaux.

Accès linéaires : les listes, les maps, les tableaux. etc.

Ils permettent de manipuler les conteneurs de manière transparente.

Un itérateur peut-être vu comme un pointeur sur un élément d’un conteneur.

Par définition, un itérateur permet de récupérer une donnée (pour la manipuler) et de passer à la suivante pour mettre en place l’itération.

(30)

Les templates

API STL

Les liens

Les chaînes de caractères Les tableaux

Les listes chaînées : std::list Les conteneurs évolués

Les itérateurs

Les itérateurs sont fondamentaux dans la STL ! Ils en existent de plusieurs types :

Accès aléatoires : tableaux.

Accès linéaires : les listes, les maps, les tableaux. etc.

Ils permettent de manipuler les conteneurs de manière transparente.

Un itérateur peut-être vu comme un pointeur sur un élément d’un conteneur.

Par définition, un itérateur permet de récupérer une donnée (pour la manipuler) et de passer à la suivante pour mettre en place l’itération.

(31)

Les templates

API STL

Les liens

Les chaînes de caractères Les tableaux

Les listes chaînées : std::list Les conteneurs évolués

Algorithmes et allocateurs

Les algorithmes :

Les algorithmes permettent de manipuler les données d’un conteneur de manière transparente.

Les algorithmes utilisent des itérateurs linéaire ou à accès aléatoire → tous les conteneurs peuvent appliquer les algorithmes.

Il en existe beaucoup :

std::find: cherche quelque chose

std::fill: rempli un conteneur avec une donnée.

std::generate: génére des données à partir d’une fonction.

Les allocateurs permettent de choisir entre plusieurs possibilités d’allocation de mémoire pour les conteneurs.

(32)

Les templates

API STL

Les liens

Les chaînes de caractères Les tableaux

Les listes chaînées : std::list Les conteneurs évolués

Algorithmes et allocateurs

Les algorithmes :

Les algorithmes permettent de manipuler les données d’un conteneur de manière transparente.

Les algorithmes utilisent des itérateurs linéaire ou à accès aléatoire → tous les conteneurs peuvent appliquer les algorithmes.

Il en existe beaucoup :

std::find: cherche quelque chose

std::fill: rempli un conteneur avec une donnée.

std::generate: génére des données à partir d’une fonction.

Les allocateurs permettent de choisir entre plusieurs possibilités d’allocation de mémoire pour les conteneurs.

(33)

Les templates

API STL

Les liens

Les chaînes de caractères Les tableaux

Les listes chaînées : std::list Les conteneurs évolués

Algorithmes et allocateurs

Les algorithmes :

Les algorithmes permettent de manipuler les données d’un conteneur de manière transparente.

Les algorithmes utilisent des itérateurs linéaire ou à accès aléatoire → tous les conteneurs peuvent appliquer les algorithmes.

Il en existe beaucoup :

std::find: cherche quelque chose

std::fill: rempli un conteneur avec une donnée.

std::generate: génére des données à partir d’une fonction.

Les allocateurs permettent de choisir entre plusieurs possibilités d’allocation de mémoire pour les conteneurs.

(34)

Les templates

API STL

Les liens

Les chaînes de caractères Les tableaux

Les listes chaînées : std::list Les conteneurs évolués

Algorithmes et allocateurs

Les algorithmes :

Les algorithmes permettent de manipuler les données d’un conteneur de manière transparente.

Les algorithmes utilisent des itérateurs linéaire ou à accès aléatoire → tous les conteneurs peuvent appliquer les algorithmes.

Il en existe beaucoup :

std::find: cherche quelque chose

std::fill: rempli un conteneur avec une donnée.

std::generate: génére des données à partir d’une fonction.

Les allocateurs permettent de choisir entre plusieurs possibilités d’allocation de mémoire pour les conteneurs.

(35)

Les templates

API STL

Les liens

Les chaînes de caractères Les tableaux

Les listes chaînées : std::list Les conteneurs évolués

Algorithmes et allocateurs

Les algorithmes :

Les algorithmes permettent de manipuler les données d’un conteneur de manière transparente.

Les algorithmes utilisent des itérateurs linéaire ou à accès aléatoire → tous les conteneurs peuvent appliquer les algorithmes.

Il en existe beaucoup :

std::find: cherche quelque chose

std::fill: rempli un conteneur avec une donnée.

std::generate: génére des données à partir d’une fonction.

Les allocateurs permettent de choisir entre plusieurs possibilités d’allocation de mémoire pour les conteneurs.

(36)

Les templates

API STL

Les liens

Les chaînes de caractères Les tableaux

Les listes chaînées : std::list Les conteneurs évolués

Algorithmes et allocateurs

Les algorithmes :

Les algorithmes permettent de manipuler les données d’un conteneur de manière transparente.

Les algorithmes utilisent des itérateurs linéaire ou à accès aléatoire → tous les conteneurs peuvent appliquer les algorithmes.

Il en existe beaucoup :

std::find: cherche quelque chose

std::fill: rempli un conteneur avec une donnée.

std::generate: génére des données à partir d’une fonction.

Les allocateurs permettent de choisir entre plusieurs possibilités d’allocation de mémoire pour les conteneurs.

(37)

Les templates

API STL

Les liens

Les chaînes de caractères Les tableaux

Les listes chaînées : std::list Les conteneurs évolués

Algorithmes et allocateurs

Les algorithmes :

Les algorithmes permettent de manipuler les données d’un conteneur de manière transparente.

Les algorithmes utilisent des itérateurs linéaire ou à accès aléatoire → tous les conteneurs peuvent appliquer les algorithmes.

Il en existe beaucoup :

std::find: cherche quelque chose

std::fill: rempli un conteneur avec une donnée.

std::generate: génére des données à partir d’une fonction.

Les allocateurs permettent de choisir entre plusieurs possibilités d’allocation de mémoire pour les conteneurs.

(38)

Les templates

API STL

Les liens

Les chaînes de caractères Les tableaux

Les listes chaînées : std::list Les conteneurs évolués

Algorithmes et allocateurs

Les algorithmes :

Les algorithmes permettent de manipuler les données d’un conteneur de manière transparente.

Les algorithmes utilisent des itérateurs linéaire ou à accès aléatoire → tous les conteneurs peuvent appliquer les algorithmes.

Il en existe beaucoup :

std::find: cherche quelque chose

std::fill: rempli un conteneur avec une donnée.

std::generate: génére des données à partir d’une fonction.

Les allocateurs permettent de choisir entre plusieurs possibilités d’allocation de mémoire pour les conteneurs.

(39)

Les templates

API STL

Les liens

Les chaînes de caractères

Les tableaux

Les listes chaînées : std::list Les conteneurs évolués

Plan

1 Les templates La philosophie Exemples simples

2 API STL

Les chaînes de caractères

Les tableaux

Les listes chaînées : std::list Les conteneurs évolués 3 Les liens

(40)

Les templates

API STL

Les liens

Les chaînes de caractères

Les tableaux

Les listes chaînées : std::list Les conteneurs évolués

Tableau de caracatères : char

Les chaînes de caractères de type C sont compatibles avec le

langage C++. Certaines classes C++ utilisent des char[].

Example 1 # i n c l u d e < f s t r e a m > 2 3 i n t m a i n ( i n t argc , c h a r ** a r g v ) 4 { 5 i n t i = 0; 6 7 if ( a r g c == 2) { 8 std :: i f s t r e a m o ( a r g v [ 1 ] ) ; 9 o > > i ; 10 } 11 std :: c o u t < < i ; 12 }

(41)

Les templates

API STL

Les liens

Les chaînes de caractères

Les tableaux

Les listes chaînées : std::list Les conteneurs évolués

Tableau de caracatères : char

Les chaînes de caractères de type C sont compatibles avec le

langage C++. Certaines classes C++ utilisent des char[].

Example 1 # i n c l u d e < f s t r e a m > 2 3 i n t m a i n ( i n t argc , c h a r ** a r g v ) 4 { 5 i n t i = 0; 6 7 if ( a r g c == 2) { 8 std :: i f s t r e a m o ( a r g v [ 1 ] ) ; 9 o > > i ; 10 } 11 std :: c o u t < < i ; 12 }

(42)

Les templates

API STL

Les liens

Les chaînes de caractères

Les tableaux

Les listes chaînées : std::list Les conteneurs évolués

std::string

La classe std::stringencapsule un buffer de caractères.

Elle peut contenir plusieurs caractères de fin de ligne « 0 ». Une API riche :

operator[](size_t): l’accès à unchar.

c_str()et data(): la conversion de la chaîne de caractères en tableau de caractères avec ou sans le caractère fin de ligne.

append,operator+,operator+=,insert,replace, erase,assign,

operator=: les fonctions d’ajout, d’insertion, de suppression, d’affectation.

find,rfind,find_first_of,find_first_not_of,find_last_of : les fonctions de recherche.

(43)

Les templates

API STL

Les liens

Les chaînes de caractères

Les tableaux

Les listes chaînées : std::list Les conteneurs évolués

std::string

La classe std::stringencapsule un buffer de caractères.

Elle peut contenir plusieurs caractères de fin de ligne « 0 ».

Une API riche :

operator[](size_t): l’accès à unchar.

c_str()et data(): la conversion de la chaîne de caractères en tableau de caractères avec ou sans le caractère fin de ligne.

append,operator+,operator+=,insert,replace, erase,assign,

operator=: les fonctions d’ajout, d’insertion, de suppression, d’affectation.

find,rfind,find_first_of,find_first_not_of,find_last_of : les fonctions de recherche.

http://www.sgi.com/tech/stl/basic_string.html

(44)

Les templates

API STL

Les liens

Les chaînes de caractères

Les tableaux

Les listes chaînées : std::list Les conteneurs évolués

std::string

La classe std::stringencapsule un buffer de caractères.

Elle peut contenir plusieurs caractères de fin de ligne « 0 ». Une API riche :

operator[](size_t): l’accès à unchar.

c_str()etdata() : la conversion de la chaîne de caractères en tableau de caractères avec ou sans le caractère fin de ligne.

append,operator+,operator+=, insert,replace, erase,assign,

operator=: les fonctions d’ajout, d’insertion, de suppression, d’affectation.

find, rfind,find_first_of,find_first_not_of,find_last_of : les fonctions de recherche.

(45)

Les templates

API STL

Les liens

Les chaînes de caractères

Les tableaux

Les listes chaînées : std::list Les conteneurs évolués

std::string

La classe std::stringencapsule un buffer de caractères.

Elle peut contenir plusieurs caractères de fin de ligne « 0 ». Une API riche :

operator[](size_t): l’accès à unchar.

c_str()etdata() : la conversion de la chaîne de caractères en tableau de caractères avec ou sans le caractère fin de ligne.

append,operator+,operator+=, insert,replace, erase,assign,

operator=: les fonctions d’ajout, d’insertion, de suppression, d’affectation.

find, rfind,find_first_of,find_first_not_of,find_last_of : les fonctions de recherche.

http://www.sgi.com/tech/stl/basic_string.html

(46)

Les templates

API STL

Les liens

Les chaînes de caractères

Les tableaux

Les listes chaînées : std::list Les conteneurs évolués

std::string

La classe std::stringencapsule un buffer de caractères.

Elle peut contenir plusieurs caractères de fin de ligne « 0 ». Une API riche :

operator[](size_t): l’accès à unchar.

c_str()etdata() : la conversion de la chaîne de caractères en tableau de caractères avec ou sans le caractère fin de ligne.

append,operator+,operator+=, insert,replace, erase,assign,

operator=: les fonctions d’ajout, d’insertion, de suppression, d’affectation.

find, rfind,find_first_of,find_first_not_of,find_last_of : les fonctions de recherche.

(47)

Les templates

API STL

Les liens

Les chaînes de caractères

Les tableaux

Les listes chaînées : std::list Les conteneurs évolués

std::string

La classe std::stringencapsule un buffer de caractères.

Elle peut contenir plusieurs caractères de fin de ligne « 0 ». Une API riche :

operator[](size_t): l’accès à unchar.

c_str()etdata() : la conversion de la chaîne de caractères en tableau de caractères avec ou sans le caractère fin de ligne.

append,operator+,operator+=, insert,replace,erase,assign,

operator=: les fonctions d’ajout, d’insertion, de suppression, d’affectation.

find, rfind,find_first_of,find_first_not_of,find_last_of : les fonctions de recherche.

http://www.sgi.com/tech/stl/basic_string.html

(48)

Les templates

API STL

Les liens

Les chaînes de caractères

Les tableaux

Les listes chaînées : std::list Les conteneurs évolués

std::string

La classe std::stringencapsule un buffer de caractères.

Elle peut contenir plusieurs caractères de fin de ligne « 0 ». Une API riche :

operator[](size_t): l’accès à unchar.

c_str()etdata() : la conversion de la chaîne de caractères en tableau de caractères avec ou sans le caractère fin de ligne.

append,operator+,operator+=, insert,replace,erase,assign,

operator=: les fonctions d’ajout, d’insertion, de suppression, d’affectation.

find, rfind,find_first_of,find_first_not_of,find_last_of : les fonctions de recherche.

(49)

Les templates

API STL

Les liens

Les chaînes de caractères

Les tableaux

Les listes chaînées : std::list Les conteneurs évolués

std::string

La classe std::stringencapsule un buffer de caractères.

Elle peut contenir plusieurs caractères de fin de ligne « 0 ». Une API riche :

operator[](size_t): l’accès à unchar.

c_str()etdata() : la conversion de la chaîne de caractères en tableau de caractères avec ou sans le caractère fin de ligne.

append,operator+,operator+=, insert,replace,erase,assign,

operator=: les fonctions d’ajout, d’insertion, de suppression, d’affectation.

find, rfind,find_first_of,find_first_not_of,find_last_of : les fonctions de recherche.

http://www.sgi.com/tech/stl/basic_string.html

(50)

Les templates

API STL

Les liens

Les chaînes de caractères

Les tableaux

Les listes chaînées : std::list Les conteneurs évolués

std::stringstream : les flux de chaînes

std::string ne possède de fonctions pour ajouter des entiers, réels ou booléen directement.

Les stringstream permettent une édition des chaînes de caractères par les flux :

Example 1 std :: o s t r i n g s t r e a m st ; 2 st < < " la v a l e u r de x est : " < < 10 < < " pixels , " 3 < < " a l o r s que y v a u t : " < < 0 . 3 4 5 < < " points , " 4 < < " x == 10 ? : " < < std :: b o o l a l p h a < < ( x == 10) < < " .\ n " 5 6 std :: s t r i n g c h a i n e ( st . str ( ) ) ; // t r a n s f o r m e en std :: s t r i n g 7 std :: c o u t < < c h a i n e ; 8 p r i n t f ( " La c h a i n e : % s " , c h a i n e . c _ s t r ( ) ) ;

(51)

Les templates

API STL

Les liens

Les chaînes de caractères

Les tableaux

Les listes chaînées : std::list Les conteneurs évolués

std::stringstream : les flux de chaînes

std::string ne possède de fonctions pour ajouter des entiers, réels ou booléen directement.

Les stringstream permettent une édition des chaînes de caractères par les flux :

Example 1 std :: o s t r i n g s t r e a m st ; 2 st < < " la v a l e u r de x est : " < < 10 < < " pixels , " 3 < < " a l o r s que y v a u t : " < < 0 . 3 4 5 < < " points , " 4 < < " x == 10 ? : " < < std :: b o o l a l p h a < < ( x == 10) < < " .\ n " 5 6 std :: s t r i n g c h a i n e ( st . str ( ) ) ; // t r a n s f o r m e en std :: s t r i n g 7 std :: c o u t < < c h a i n e ; 8 p r i n t f ( " La c h a i n e : % s " , c h a i n e . c _ s t r ( ) ) ;

(52)

Les templates

API STL

Les liens

Les chaînes de caractères

Les tableaux

Les listes chaînées : std::list Les conteneurs évolués

std::stringstream : les flux de chaînes

std::string ne possède de fonctions pour ajouter des entiers, réels ou booléen directement.

Les stringstream permettent une édition des chaînes de caractères par les flux :

Example 1 std :: o s t r i n g s t r e a m st ; 2 st < < " la v a l e u r de x est : " < < 10 < < " pixels , " 3 < < " a l o r s que y v a u t : " < < 0 . 3 4 5 < < " points , " 4 < < " x == 10 ? : " < < std :: b o o l a l p h a < < ( x == 10) < < " .\ n " 5 6 std :: s t r i n g c h a i n e ( st . str ( ) ) ; // t r a n s f o r m e en std :: s t r i n g 7 std :: c o u t < < c h a i n e ; 8 p r i n t f ( " La c h a i n e : % s " , c h a i n e . c _ s t r ( ) ) ;

(53)

Les templates

API STL

Les liens

Les chaînes de caractères

Les tableaux

Les listes chaînées : std::list Les conteneurs évolués

Plan

1 Les templates La philosophie Exemples simples

2 API STL

Les chaînes de caractères

Les tableaux

Les listes chaînées : std::list Les conteneurs évolués 3 Les liens

(54)

Les templates

API STL

Les liens

Les chaînes de caractères

Les tableaux

Les listes chaînées : std::list Les conteneurs évolués

std::vector

Les tableaux de type C existe en C++ : Les tableaux alloués dans la pile :

1 d o u b l e t a b 1 [ 1 0 0 0 ] ;

Alloués dans le tas, ne pas oublier la destruction :

1 d o u b l e* t a b 2 = n e w d o u b l e [ 1 0 0 0 ] ;

2 d e l e t e[] t a b 2 ;

Alloués dans le tas à deux dimensions :

1 d o u b l e** t a b 3 = n e w d o u b l e * [ 1 0 0 0 ] ; 2 f o r ( s i z e _ t i = 0; i < 1 0 0 0 ; ++ i ) 3 t a b 3 [ i ] = n e w d o u b l e [ 1 0 0 0 ] ; 4 5 f o r ( s i z e _ t i = 0; i < 1 0 0 0 ; ++ i ) 6 d e l e t e[] t a b 3 [ i ]; 7 d e l e t e[] t a b 3 ;

(55)

Les templates

API STL

Les liens

Les chaînes de caractères

Les tableaux

Les listes chaînées : std::list Les conteneurs évolués

std::vector

Les tableaux de type C existe en C++ : Les tableaux alloués dans la pile :

1 d o u b l e t a b 1 [ 1 0 0 0 ] ;

Alloués dans le tas, ne pas oublier la destruction :

1 d o u b l e* t a b 2 = n e w d o u b l e [ 1 0 0 0 ] ;

2 d e l e t e[] t a b 2 ;

Alloués dans le tas à deux dimensions :

1 d o u b l e** t a b 3 = n e w d o u b l e * [ 1 0 0 0 ] ; 2 f o r ( s i z e _ t i = 0; i < 1 0 0 0 ; ++ i ) 3 t a b 3 [ i ] = n e w d o u b l e [ 1 0 0 0 ] ; 4 5 f o r ( s i z e _ t i = 0; i < 1 0 0 0 ; ++ i ) 6 d e l e t e[] t a b 3 [ i ]; 7 d e l e t e[] t a b 3 ;

(56)

Les templates

API STL

Les liens

Les chaînes de caractères

Les tableaux

Les listes chaînées : std::list Les conteneurs évolués

std::vector

Les tableaux de type C existe en C++ : Les tableaux alloués dans la pile :

1 d o u b l e t a b 1 [ 1 0 0 0 ] ;

Alloués dans le tas, ne pas oublier la destruction :

1 d o u b l e* t a b 2 = n e w d o u b l e [ 1 0 0 0 ] ;

2 d e l e t e[] t a b 2 ;

Alloués dans le tas à deux dimensions :

1 d o u b l e** t a b 3 = n e w d o u b l e * [ 1 0 0 0 ] ; 2 f o r ( s i z e _ t i = 0; i < 1 0 0 0 ; ++ i ) 3 t a b 3 [ i ] = n e w d o u b l e [ 1 0 0 0 ] ; 4 5 f o r ( s i z e _ t i = 0; i < 1 0 0 0 ; ++ i ) 6 d e l e t e[] t a b 3 [ i ];

(57)

Les templates

API STL

Les liens

Les chaînes de caractères

Les tableaux

Les listes chaînées : std::list Les conteneurs évolués

std::vector

Gestion des tableaux C est problématique dans le sens où il faut faire très attention aux accès, à l’allocation, désallocation etc.

La classe std::vectorest un très bon remplacement :

Gestion automatique de la mémoire, allocation, réallocation et destruction.

Coût de O(1) pour l’accès aléatoire et la suppression en fin de tableau.

Coût de O(n) pour l’ajout ou la suppression d’une case.

Exemple : Example 1 std :: v e c t o r < d o u b l e > t a b 2 ( 1 0 0 0 ) ; 2 std :: v e c t o r < std :: v e c t o r > t a b 3 ( 1 0 0 0 ) ; 3 f o r ( s i z e _ t i = 0; i < 1 0 0 0 ; ++ i ) 4 t a b 3 [ i ]. r e s i z e ( 1 0 0 0 ) ;

(58)

Les templates

API STL

Les liens

Les chaînes de caractères

Les tableaux

Les listes chaînées : std::list Les conteneurs évolués

std::vector

Gestion des tableaux C est problématique dans le sens où il faut faire très attention aux accès, à l’allocation, désallocation etc.

La classe std::vectorest un très bon remplacement :

Gestion automatique de la mémoire, allocation, réallocation et destruction.

Coût de O(1) pour l’accès aléatoire et la suppression en fin de tableau.

Coût de O(n) pour l’ajout ou la suppression d’une case.

Exemple : Example 1 std :: v e c t o r < d o u b l e > t a b 2 ( 1 0 0 0 ) ; 2 std :: v e c t o r < std :: v e c t o r > t a b 3 ( 1 0 0 0 ) ; 3 f o r ( s i z e _ t i = 0; i < 1 0 0 0 ; ++ i ) 4 t a b 3 [ i ]. r e s i z e ( 1 0 0 0 ) ;

(59)

Les templates

API STL

Les liens

Les chaînes de caractères

Les tableaux

Les listes chaînées : std::list Les conteneurs évolués

std::vector

Gestion des tableaux C est problématique dans le sens où il faut faire très attention aux accès, à l’allocation, désallocation etc.

La classe std::vectorest un très bon remplacement :

Gestion automatique de la mémoire, allocation, réallocation et destruction.

Coût de O(1) pour l’accès aléatoire et la suppression en fin de tableau.

Coût de O(n) pour l’ajout ou la suppression d’une case.

Exemple : Example 1 std :: v e c t o r < d o u b l e > t a b 2 ( 1 0 0 0 ) ; 2 std :: v e c t o r < std :: v e c t o r > t a b 3 ( 1 0 0 0 ) ; 3 f o r ( s i z e _ t i = 0; i < 1 0 0 0 ; ++ i ) 4 t a b 3 [ i ]. r e s i z e ( 1 0 0 0 ) ;

(60)

Les templates

API STL

Les liens

Les chaînes de caractères

Les tableaux

Les listes chaînées : std::list Les conteneurs évolués

std::vector

Gestion des tableaux C est problématique dans le sens où il faut faire très attention aux accès, à l’allocation, désallocation etc.

La classe std::vectorest un très bon remplacement :

Gestion automatique de la mémoire, allocation, réallocation et destruction.

Coût de O(1) pour l’accès aléatoire et la suppression en fin de tableau.

Coût de O(n) pour l’ajout ou la suppression d’une case.

Exemple : Example 1 std :: v e c t o r < d o u b l e > t a b 2 ( 1 0 0 0 ) ; 2 std :: v e c t o r < std :: v e c t o r > t a b 3 ( 1 0 0 0 ) ; 3 f o r ( s i z e _ t i = 0; i < 1 0 0 0 ; ++ i ) 4 t a b 3 [ i ]. r e s i z e ( 1 0 0 0 ) ;

(61)

Les templates

API STL

Les liens

Les chaînes de caractères

Les tableaux

Les listes chaînées : std::list Les conteneurs évolués

std::vector

Gestion des tableaux C est problématique dans le sens où il faut faire très attention aux accès, à l’allocation, désallocation etc.

La classe std::vectorest un très bon remplacement :

Gestion automatique de la mémoire, allocation, réallocation et destruction.

Coût de O(1) pour l’accès aléatoire et la suppression en fin de tableau.

Coût de O(n) pour l’ajout ou la suppression d’une case.

Exemple : Example 1 std :: v e c t o r < d o u b l e > t a b 2 ( 1 0 0 0 ) ; 2 std :: v e c t o r < std :: v e c t o r > t a b 3 ( 1 0 0 0 ) ; 3 f o r ( s i z e _ t i = 0; i < 1 0 0 0 ; ++ i ) 4 t a b 3 [ i ]. r e s i z e ( 1 0 0 0 ) ;

(62)

Les templates

API STL

Les liens

Les chaînes de caractères

Les tableaux

Les listes chaînées : std::list Les conteneurs évolués

std::vector

Gestion des tableaux C est problématique dans le sens où il faut faire très attention aux accès, à l’allocation, désallocation etc.

La classe std::vectorest un très bon remplacement :

Gestion automatique de la mémoire, allocation, réallocation et destruction.

Coût de O(1) pour l’accès aléatoire et la suppression en fin de tableau.

Coût de O(n) pour l’ajout ou la suppression d’une case.

Exemple : Example 1 std :: v e c t o r < d o u b l e > t a b 2 ( 1 0 0 0 ) ; 2 std :: v e c t o r < std :: v e c t o r > t a b 3 ( 1 0 0 0 ) ; 3 f o r ( s i z e _ t i = 0; i < 1 0 0 0 ; ++ i ) 4 t a b 3 [ i ]. r e s i z e ( 1 0 0 0 ) ;

(63)

Les templates

API STL

Les liens

Les chaînes de caractères

Les tableaux

Les listes chaînées : std::list Les conteneurs évolués

std::vector

Gestion des tableaux C est problématique dans le sens où il faut faire très attention aux accès, à l’allocation, désallocation etc.

La classe std::vectorest un très bon remplacement :

Gestion automatique de la mémoire, allocation, réallocation et destruction.

Coût de O(1) pour l’accès aléatoire et la suppression en fin de tableau.

Coût de O(n) pour l’ajout ou la suppression d’une case.

Exemple : Example 1 std :: v e c t o r < d o u b l e > t a b 2 ( 1 0 0 0 ) ; 2 std :: v e c t o r < std :: v e c t o r > t a b 3 ( 1 0 0 0 ) ; 3 f o r ( s i z e _ t i = 0; i < 1 0 0 0 ; ++ i ) 4 t a b 3 [ i ]. r e s i z e ( 1 0 0 0 ) ;

(64)

Les templates

API STL

Les liens

Les chaînes de caractères

Les tableaux

Les listes chaînées : std::list Les conteneurs évolués

std::vector

Les fonctions membres :

operator[](int) et at(int)les opérateurs d’accès aléatoires aux éléments, le deuxième lève une exception si l’entier passé en paramètre sort du tableau.

size_t size() et resize(size_t)etreserve(size_t) les fonctions pour, respectivement, connaître la taille d’un tableau, modifier sa taille ou préallouer une zone mémoire.

push_back(T), pop_back(), les fonction d’ajout et de suppression d’élément en fin de tableau (coût O(1)).

Example

1 std :: v e c t o r < d o u b l e > v (1000 , 1 . 0 ) ;

2 v . p u s h _ b a c k ( 2 . 0 ) ;

(65)

Les templates

API STL

Les liens

Les chaînes de caractères

Les tableaux

Les listes chaînées : std::list Les conteneurs évolués

std::vector

Les fonctions membres :

operator[](int) et at(int)les opérateurs d’accès aléatoires aux éléments, le deuxième lève une exception si l’entier passé en paramètre sort du tableau.

size_t size() etresize(size_t)et reserve(size_t)les fonctions pour, respectivement, connaître la taille d’un tableau, modifier sa taille ou préallouer une zone mémoire.

push_back(T), pop_back(), les fonction d’ajout et de suppression d’élément en fin de tableau (coût O(1)).

Example

1 std :: v e c t o r < d o u b l e > v (1000 , 1 . 0 ) ;

2 v . p u s h _ b a c k ( 2 . 0 ) ;

(66)

Les templates

API STL

Les liens

Les chaînes de caractères

Les tableaux

Les listes chaînées : std::list Les conteneurs évolués

std::vector

Les fonctions membres :

operator[](int) et at(int)les opérateurs d’accès aléatoires aux éléments, le deuxième lève une exception si l’entier passé en paramètre sort du tableau.

size_t size() etresize(size_t)et reserve(size_t)les fonctions pour, respectivement, connaître la taille d’un tableau, modifier sa taille ou préallouer une zone mémoire.

push_back(T), pop_back(), les fonction d’ajout et de suppression d’élément en fin de tableau (coût O(1)).

Example

1 std :: v e c t o r < d o u b l e > v (1000 , 1 . 0 ) ;

2 v . p u s h _ b a c k ( 2 . 0 ) ;

(67)

Les templates

API STL

Les liens

Les chaînes de caractères

Les tableaux

Les listes chaînées : std::list Les conteneurs évolués

std::vector, les itérateurs

Les itérateurs permettent de manipuler plus facilement les éléments des conteneurs de la STL :

Example 1 std :: v e c t o r < std :: s t r i n g > t ( 2 0 0 ) ; 2 f o r ( std :: v e c t o r < i n t >:: i t e r a t o r it = t . b e g i n (); 3 it != t . end (); ++ it ) 4 std :: c o u t < < (* it ) < < ‘ ‘ ’ ’ ; 5 6 std :: v e c t o r < i n t >:: i t e r a t o r fd ; 7 8 fd = std :: f i n d ( t . b e g i n () , t . end () , ‘ ‘ d e b i a n ’ ’ ); 9 10 if ( fd != t . end ()) 11 v . e r a s e ( fd );

(68)

Les templates

API STL

Les liens

Les chaînes de caractères Les tableaux

Les listes chaînées : std::list

Les conteneurs évolués

Plan

1 Les templates La philosophie Exemples simples

2 API STL

Les chaînes de caractères Les tableaux

Les listes chaînées : std::list

Les conteneurs évolués 3 Les liens

(69)

Les templates

API STL

Les liens

Les chaînes de caractères Les tableaux

Les listes chaînées : std::list

Les conteneurs évolués

std::list

Une liste doublement chaînée avec un coût en O(1) pour l’ajout, la suppression n’importe où dans la liste.

push_back(T),push_front(T),pop_back()et pop_front()les fonctions d’ajout en début et fin de liste et les fonctions de suppression en début et fin de liste.

Example 1 std :: l i s t < i n t > l ; 2 l . p u s h _ b a c k ( 5 ) ; 3 l . p u s h _ f r o n t ( 3 ) ; 4 5 std :: c o u t < < l . f r o n t () == 3; 6 7 std :: l i s t < i n t >:: i t e r a t o r it ; 8 it = std :: f i n d ( l . b e g i n (); l . end (); 3); 9 10 std :: c o u t < < it != l . end ();

(70)

Les templates

API STL

Les liens

Les chaînes de caractères Les tableaux

Les listes chaînées : std::list

Les conteneurs évolués

std::list

Une liste doublement chaînée avec un coût en O(1) pour l’ajout, la suppression n’importe où dans la liste.

push_back(T),push_front(T),pop_back()et pop_front()les fonctions d’ajout en début et fin de liste et les fonctions de suppression en début et fin de liste.

Example 1 std :: l i s t < i n t > l ; 2 l . p u s h _ b a c k ( 5 ) ; 3 l . p u s h _ f r o n t ( 3 ) ; 4 5 std :: c o u t < < l . f r o n t () == 3; 6 7 std :: l i s t < i n t >:: i t e r a t o r it ; 8 it = std :: f i n d ( l . b e g i n (); l . end (); 3); 9 10 std :: c o u t < < it != l . end ();

(71)

Les templates

API STL

Les liens

Les chaînes de caractères Les tableaux

Les listes chaînées : std::list

Les conteneurs évolués

std::list

Une liste doublement chaînée avec un coût en O(1) pour l’ajout, la suppression n’importe où dans la liste.

push_back(T),push_front(T),pop_back()et pop_front()les fonctions d’ajout en début et fin de liste et les fonctions de suppression en début et fin de liste.

Example 1 std :: l i s t < i n t > l ; 2 l . p u s h _ b a c k ( 5 ) ; 3 l . p u s h _ f r o n t ( 3 ) ; 4 5 std :: c o u t < < l . f r o n t () == 3; 6 7 std :: l i s t < i n t >:: i t e r a t o r it ; 8 it = std :: f i n d ( l . b e g i n (); l . end (); 3); 9 10 std :: c o u t < < it != l . end ();

(72)

Les templates

API STL

Les liens

Les chaînes de caractères Les tableaux

Les listes chaînées : std::list

Les conteneurs évolués

std::list

Une liste doublement chaînée avec un coût en O(1) pour l’ajout, la suppression n’importe où dans la liste.

push_back(T),push_front(T),pop_back()et pop_front()les fonctions d’ajout en début et fin de liste et les fonctions de suppression en début et fin de liste.

Example 1 std :: l i s t < i n t > l ; 2 l . p u s h _ b a c k ( 5 ) ; 3 l . p u s h _ f r o n t ( 3 ) ; 4 5 std :: c o u t < < l . f r o n t () == 3; 6 7 std :: l i s t < i n t >:: i t e r a t o r it ; 8 it = std :: f i n d ( l . b e g i n (); l . end (); 3);

(73)

Les templates

API STL

Les liens

Les chaînes de caractères Les tableaux

Les listes chaînées : std::list

Les conteneurs évolués

Plan

1 Les templates La philosophie Exemples simples

2 API STL

Les chaînes de caractères Les tableaux

Les listes chaînées : std::list

Les conteneurs évolués

3 Les liens

(74)

Les templates

API STL

Les liens

Les chaînes de caractères Les tableaux

Les listes chaînées : std::list

Les conteneurs évolués

Les map : tableau associatif

Cette classe est une table associant une clé à une valeur. Elle est définie en fournissant deux types. À partir de la clé nous pouvons récupérer la valeur avec un coût d’ordre O(log (N)).

Example 1 map < d o u b l e , s t r i n g > m ; 2 m [ 0 . 1 ] = " h e l l o " ; 3 m [ 0 . 5 ] = " w o r l d " ; 4 m [ 0 . 6 ] = " ! " ; 5 6 map < d o u b l e , s t r i n g >:: i t e r a t o r it = m . b e g i n (); 7 f o r (; it != m . end (); ++ it ) 8 c o u t < < (* it ). f i r s t < < " " < < (* it ). s e c o n d < < " \ n " ; 9 10 if ( m . f i n d ( 1 . 0 ) == m . end ()) c o u t < < " 1.0 n ’ e x i s t e pas " ; 11 c o u t < < m [ 1 . 0 ] < < " \ n " ; 12 if ( m . f i n d ( 1 . 0 ) == m . end ()) c o u t < < " 1.0 e x i s t e " ;

(75)

Les templates API STL

Les liens

Les liens

Une petite liste de liens :

stl http://www.sgi.com/tech/stl/ C++ http://www.cplusplus.com/ faq C++http://www.parashift.com/c++-faq-lite/index.html gtkmm http://www.gtkmm.org gtkmm le livre : http://www.gtkmm.org/gtkmm2/docs/tutorial/html/index.html gtk+ http://www.gtk.org

(76)

Les templates API STL

Les liens

Les liens

Une petite liste de liens :

stl http://www.sgi.com/tech/stl/ C++ http://www.cplusplus.com/ faq C++http://www.parashift.com/c++-faq-lite/index.html gtkmm http://www.gtkmm.org gtkmm le livre : http://www.gtkmm.org/gtkmm2/docs/tutorial/html/index.html gtk+ http://www.gtk.org

(77)

Les templates API STL

Les liens

Les liens

Une petite liste de liens :

stl http://www.sgi.com/tech/stl/ C++ http://www.cplusplus.com/ faq C++http://www.parashift.com/c++-faq-lite/index.html gtkmm http://www.gtkmm.org gtkmm le livre : http://www.gtkmm.org/gtkmm2/docs/tutorial/html/index.html gtk+ http://www.gtk.org

(78)

Les templates API STL

Les liens

Les liens

Une petite liste de liens :

stl http://www.sgi.com/tech/stl/ C++ http://www.cplusplus.com/ faq C++http://www.parashift.com/c++-faq-lite/index.html gtkmm http://www.gtkmm.org gtkmm le livre : http://www.gtkmm.org/gtkmm2/docs/tutorial/html/index.html gtk+ http://www.gtk.org

(79)

Les templates API STL

Les liens

Les liens

Une petite liste de liens :

stl http://www.sgi.com/tech/stl/ C++ http://www.cplusplus.com/ faq C++http://www.parashift.com/c++-faq-lite/index.html gtkmm http://www.gtkmm.org gtkmm le livre : http://www.gtkmm.org/gtkmm2/docs/tutorial/html/index.html gtk+ http://www.gtk.org

(80)

Les templates API STL

Les liens

Les liens

Une petite liste de liens :

stl http://www.sgi.com/tech/stl/ C++ http://www.cplusplus.com/ faq C++http://www.parashift.com/c++-faq-lite/index.html gtkmm http://www.gtkmm.org gtkmm le livre : http://www.gtkmm.org/gtkmm2/docs/tutorial/html/index.html gtk+ http://www.gtk.org

Figure

Tableau de caracatères : char

Références

Documents relatifs

livré plusieurs lots de céramique médiévale, nous proposons ici quelques remarques préliminaires ainsi qu’un essai de datation qui, en l’état actuel des connaissances sur

The objective of this last analysis was to characterise (+)-ODM pharmacokinetics and pharmacodynamics using pain tolerance threshold from an electrically stimulated pain model

On notera parmi les résultats probants, la disposition de la grande majorité des cabanes de marais dans la première moitié du XIXe siècle au sud du chenal principal de Brouage,

( 2012 ), where observations of incomplete rankings are modeled as cen- sored observations of permutations, leading to the follow- ing setup: first a permutation Σ is drawn from p,

En ce qui concerne la simulation num´erique, la mod´elisation semi-continue, d´evelopp´ee pour les sollicitations de type impact et pr´esent´ee dans les articles [8, 9], est

Ces masques permettent d’imposer la géométrie d’usinage souhaitée (ici marche de 8 mm pour chacun des plis pour correspondre au ratio de 1/30 entre la longueur de recouvrement

Avec une étendue des salaires moyens importante entre les niveaux d’enseignement, la France se retrouve parmi les pays européens avec une inégalité de salaire au détriment

Une sélection de ressources à l’usage des enseignants est recensée par les documentalistes de la médiathèque comme, par exemple, les sites du « Marché de la