La bibliothèque de Template standard (STL)
La Standard Template Library (STL) est le résultat d'années de recherche visant à résoudre deux problèmes fondamentaux : la réutilisation des logiciels et la séparation des fonctionnalités.
- Conteneurs — stockent les données.
- Algorithmes — opèrent sur les données des conteneurs.
- Itérateurs — relient les conteneurs aux algorithmes.
Conteneurs
Les conteneurs sont le cœur de la STL. La bibliothèque définit quatre catégories de conteneurs, chacune adaptée à un groupe d'applications spécifique.
Conteneurs de séquences
Les conteneurs de séquences organisent les éléments dans un ordre linéaire. Chacun répond à un besoin précis :
| Conteneur | Caractéristique principale |
|---|---|
std::vector | Taille dynamique, gestion automatique de la mémoire, performances élevées. Choix par défaut. |
std::array | Taille fixe à la compilation. Surcharge mémoire et CPU minimale. |
std::deque | Insertion efficace en début et en fin. |
std::list | Liste doublement chaînée. Insertions/suppressions rapides à n'importe quelle position. |
std::forward_list | Liste simplement chaînée. Optimisée pour les opérations en avant uniquement. |
Conteneurs associatifs
Les conteneurs associatifs stockent des paires clé–valeur et permettent de retrouver une valeur par sa clé. Exemple typique : un annuaire téléphonique (clé = nom, valeur = numéro).
| Clés ordonnées | Clés non ordonnées (table de hachage) |
|---|---|
std::set | std::unordered_set |
std::map | std::unordered_map |
std::multiset | std::unordered_multiset |
std::multimap | std::unordered_multimap |
Adaptateurs de conteneurs
Les adaptateurs fournissent une interface simplifiée aux conteneurs de séquence. C++ propose trois adaptateurs :
| Adaptateur | Description |
|---|---|
std::stack | Interface LIFO (pile) |
std::queue | Interface FIFO (file d'attente) |
std::priority_queue | File avec priorité (élément le plus prioritaire en tête) |
Algorithmes
Les algorithmes STL sont des opérations appliquées aux éléments des conteneurs. La STL en propose plus de 100, répartis en quatre catégories :
| Catégorie | Description | Exemples |
|---|---|---|
| Non mutants | Ne modifient pas la structure du conteneur | Recherche, comptage, comparaison |
| Mutants | Modifient la structure | Génération, remplacement, suppression |
| Tri | Réorganisent les éléments | Tri, permutation, partitionnement |
| Numériques | Appliquent des opérations mathématiques | Somme, produit, min/max |
Itérateurs
Les itérateurs sont le lien entre les conteneurs et les algorithmes. Générés par le conteneur, ils se comportent comme des pointeurs généralisés permettant de parcourir les éléments vers l'avant, vers l'arrière ou jusqu'à une position arbitraire.
Utiliser la STL dans un programme
Trois étapes sont nécessaires pour utiliser la STL :
1 — Inclure les fichiers d'en-tête
#include <iostream>
#include <vector>2 — Gérer l'espace de noms std
Tous les noms de la STL appartiennent à l'espace de noms std. Trois approches sont possibles :
Noms qualifiés (recommandé en production)
Utilisation de l'opérateur de résolution de portée :: à chaque appel.
#include <iostream>
#include <chrono>
std::cout << "Hello world" << std::endl;
auto timeNow = std::chrono::system_clock::now();Déclaration using (sélective)
Importe un nom précis dans la portée courante.
#include <iostream>
#include <chrono>
using std::cout;
using std::endl;
using std::chrono::system_clock;
cout << "Hello world" << endl; // nom non qualifié
auto timeNow = system_clock::now();Directive using namespace (pratique, à éviter globalement)
Rend accessible tous les noms d'un espace de noms sans qualification. Ne les importe pas dans la portée courante — elle les rend seulement visibles.
#include <iostream>
#include <chrono>
using namespace std;
cout << "Hello world" << endl; // non qualifié
auto timeNow = chrono::system_clock::now(); // partiellement qualifié- Un nom local peut en masquer un déclaré dans un espace de noms environnant.
- Des ambiguïtés peuvent survenir si le même nom est visible depuis plusieurs espaces de noms.
- L'utilisation de
using namespace std;dans un fichier d'en-tête est fortement déconseillée car elle affecte tous les fichiers qui l'incluent.
3 — Édition des liens
La troisième étape consiste à lier les bibliothèques nécessaires lors de la compilation. Pour la STL standard, cette étape est généralement automatique et ne requiert aucune option supplémentaire.
Discussion (0)
Soyez le premier à laisser un commentaire !
Laisser un commentaire
Votre commentaire sera visible après modération.