STL

Transcription

STL
Programmation en C++
Standard Library
●
●
Chaînes (Strings)
Conteneurs
1
Organisation
●
Le bibliothèque standard SL est organisée en plusieurs parties.
– STL (Standard Template Library):
● Conteneurs
● Itérateurs
● Algorithmes
– Chaînes de caractères (Strings)
– Flots (Streams)
● Déjà expliqué dans la présentation précédente
– Numériques
– Internationalisation
● Ne seront pas expliquées dans ce cours
2
Strings
●
●
●
Les classes de String nous permettent d'utiliser les chaînes de
caractères comme les types normaux qui ne causent pas de
problèmes pour l'utilisateur
– Différent des "string ordinaires" de type char * ou const char *
– Copie, l'affectation et les fonctions de comparaison, comme
pour les types fondamentaux, sont déjà disponibles - sans se
soucier de corruption de la mémoire
Défini dans l'« header » <string>
Type: std::string - la chaîne de caractères de type char
3
Opérations avec String
Affectation ('assignment, operator ='):
●
std::string s = "abcd";
std::string t = s;
t += “efgh”;
●
Taille de string ('size') :
std::string s = "abcd";
int size = s.size();
●
Recherche dans une chaîne ('find'):
std::string s = "abcd";
int pos = s.find("bc");
●
Conversion en C-string (char *):
std::string s = "abcd";
char* cs = s.c_str();
4
STL
STL = Standard Template Library
●
Le cœur de SL
●
Fournit une variété de classes de conteneur que répond à des
besoins différents, avec plusieurs algorithmes qui fonctionnent sur
eux
– Les programmeurs peuvent oublier la programmation des
tableaux dynamiques, des algorithmes de recherche etc
– Il suffit de choisir le conteneur approprié et d'appeler ses
méthodes pour le traitement des données
●
Tous les composants sont des patrons ('templates')
– Peuvent être utilisés avec des types arbitraires
●
Extrêmement efficace
●
La coopération des différentes composantes est bien-structurée :
– Les conteneurs, itérateurs et algorithmes
5
Conteneurs
●
●
●
Gérent une collection d'éléments
Ordonnés ('Sequence') = collections ordonnées dans lesquelles
chaque élément a une certaine position (indépendante de la
valeur)
–
Vecteur ('vector') : 1 dimensional array
–
Liste ('list'): liste doublement chainée
Associative = collections triés (la position réelle d'un élément
dépend de sa valeur)
–
–
Set / Multiset:
● Élément classés en fonction de leur propre valeur
Map / Multimap:
● Les éléments sont paires clé / valeur, classés en fonction de valeur
de la clé
6
Vector
●
●
●
Dans le 'header' <vector>
Type: std::vector<T> - où T est
le type d'élément
Des fonctions utiles:
#include <iostream>
– push_back(elem)
#include <vector>
Ajouter un élément à la fin int main ()
{
– at(idx) ou [idx]
std::vector<int> myVector;
● Retour de idx-ème élément
myVector.push_back(3);
– front(), back()
myVector.push_back(4);
● Retour de le premier, le
dernier élément
std::cout << myVector[0] << std::endl;
●
–
size()
●
–
myVector.at(1) = 5;
std::cout << myVector.back() << std::endl;
Retour de la taille de
vecteur
clear()
●
Supprimer tous les
éléments
myVector.clear();
return 0;
}
7
List
●
●
●
Dans le 'header' <list>
Type: std::list<T> - où T est le
type d'élément
Des fonctions utiles:
– push_front(elem),
push_back(elem)
●
–
myList.push_front(3);
myList.push_front(2);
myList.push_back(4);
Ajouter un élément au début,
à la fin
myList.pop_front();
myList.pop_back();
pop_front(), pop_back()
●
–
#include <iostream>
#include <list>
int main ()
{
std::list<int> myList;
Enlever l'élément au début,
à la fin
std::cout << myList.front()
<< std::endl;
std::cout << myList.back()
<< std::endl;
front(), back(), size(), clear()
●
Même comme pour vector
}
●
return 0;
Certaines méthodes sont communes à la fois au vecteur et a la
liste (et aussi aux autres conteneurs): size (), clear (), ...
8
Itérateurs
●
●
Itérateur ('iterator') = objet qui peut "parcourir" (naviguer parmi)
les éléments
Il représente une certaine position dans un conteneur
v.end()
v.begin()
vector
T
T
T
T
T
T
T
it
●
●
Tous les conteneurs fournissent les mêmes fonctions de base qui
permettent aux itérateurs de naviguer parmi leurs éléments
Les fonctions définies pour tous les conteneurs:
– begin(), end()
● Retour d'un itérateur, qui représente le commencement, la
fin des éléments dans le conteneur.
● La fin est la position derrière le dernier élément
9
Itérateurs
●
●
●
L'« header »:
– Tous les conteneurs définissent leur propre type d'itérateur, il
n'y a pas d '« header » spécial pour l'utilisation des itérateurs
Types:
– container_type::iterator
– container_type::const_iterator
Opérations de base:
– Operator *
●
–
Operator ++
●
–
Permet à l'itérateur de passer à un autre élément
Operators == and !=
●
–
Renvoie l'élément de la position actuelle
Renvoie le résultat si deux itérateurs représentent la même
position ou non
Operator =
●
Attribuer un itérateur (la position de l'élément auquel il se réfère)
10
Itérateurs - Exemple
#include <iostream>
#include <vector>
int main()
{
std::vector<int> myVector;
// ... fill the vector here
// Iterating over vector elements
std::vector<int>::iterator it;
for ( it = myVector.begin(); it != myVector.end(); ++it ) {
int i = *it;
std::cout << "i = " << i << std::endl;
}
return 0;
}
11
Quand utiliser le quel conteneur
●
●
●
Vector
– Par défaut, vous devez utiliser un vecteur
– Si vous avez besoin d'accéder au N-ème élément
– L'insertion et le retrait peuvent être coûteux
– Très efficace lorsque vous naviguez sur le conteneur
List
– Si vous avez souvent besoin d'insérer ou de retirer un élément
en plein milieu du conteneur
– L'insertion a lieu à temps constant
– L'accès au N-ème élément par itération à partir du 1er
Map
– Si vous avez besoin d'un élément via une clé
– Une liste triée maintenue lors de l'insertion de nouveaux
éléments
– Liste associative
12

Documents pareils

Les transparents du cours 3

Les transparents du cours 3 Test si vide : empty(), nb d'éléments : size()

Plus en détail

class - DCanL

class - DCanL Opérations standard sur un std::set • insert(T) • erase(i), i étant un std::set::iterator • find(T) • begin(), end(), etc... comme toute collection C++ • Empty() • count(T) • etc... std::set<...

Plus en détail

Le Traitement des données avec la STL (pdf - David Saint

Le Traitement des données avec la STL (pdf - David Saint pointeurs ‘Précédent ‘ ‘Suivant’. Pour un nombre d’objets identiques une liste prend souvent plus de place en mémoire. Tous les conteneurs disposent de 3 fonctions : • begin() renvoie l’itérateur s...

Plus en détail