Bibliothèque standard C++ (STL) : aperçu complet
La bibliothèque standard C++ (souvent appelée STL — Standard Template Library) est un ensemble puissant de classes et de fonctions génériques qui fait partie intégrante de tout compilateur C++. Elle offre au développeur des solutions prêtes à l'emploi, éprouvées et hautement efficaces pour la plupart des tâches quotidiennes : de la manipulation de collections de données aux algorithmes complexes et aux entrées-sorties. L'étude de la STL est une étape clé dans la maîtrise du C++ moderne.
Dans cet article, nous allons détailler les principaux composants de la bibliothèque standard, leur objectif et fournir des exemples pratiques d'utilisation.
1. Conteneurs (Containers)
Les conteneurs sont des structures de données conçues pour stocker des collections d'objets. Tous les conteneurs sont des classes génériques, ce qui permet de stocker des éléments de n'importe quel type.
- Conteneurs séquentiels : stockent les éléments dans un ordre linéaire.
std::vector— tableau dynamique. Accès rapide par index, insertion/suppression à la fin — O(1), au milieu — O(n).std::list— liste doublement chaînée. Insertion/suppression rapide à n'importe quel endroit, mais pas d'accès direct par index.std::deque— file d'attente double. Insertion/suppression rapide aussi bien au début qu'à la fin.std::array— tableau statique de taille fixe (C++11).
- Conteneurs associatifs : stockent les éléments dans un ordre trié (généralement basé sur des arbres rouge-noir).
std::set— ensemble d'éléments uniques.std::map— dictionnaire (tableau associatif) de paires "clé-valeur".std::multiset/std::multimap— analogues, autorisant les doublons.
- Conteneurs associatifs non ordonnés (C++11) : utilisent des tables de hachage.
std::unordered_set,std::unordered_map— accès rapide en moyenne O(1).
- Adaptateurs de conteneurs : fournissent une interface limitée basée sur un autre conteneur.
std::stack(LIFO),std::queue(FIFO),std::priority_queue(avec priorité).
Exemple d'utilisation de std::vector :
#include <iostream>#include <vector>
int main() { std::vector<int> numbers = {10, 20, 30, 40, 50}; numbers.push_back(60); // Ajoute un élément à la fin for (int n : numbers) { std::cout << n << " "; } // Affichage : 10 20 30 40 50 60 return 0;}2. Itérateurs (Iterators)
Les itérateurs sont des pointeurs généralisés qui permettent de parcourir les éléments de n'importe quel conteneur de manière uniforme. Ils sont le lien entre les conteneurs et les algorithmes.
- Catégories d'itérateurs : Input, Output, Forward, Bidirectional, Random Access.
begin()/end()— retournent des itérateurs sur le premier et le dernier+1 élément.std::advance()— déplace un itérateur de N positions.std::distance()— calcule la distance entre deux itérateurs.
Exemple avec des itérateurs :
#include <iostream>#include <vector>
int main() { std::vector<std::string> words = {"Hello", "World", "C++"}; for (auto it = words.begin(); it != words.end(); ++it) { std::cout << *it << " "; } // Affichage : Hello World C++ return 0;}3. Algorithmes (
Aussi dans la bibliothèque
Frameworks CLI pour PHP : Symfony Console et Laravel Zero — guide complet
Rate Limiting en Go (Golang) : bibliothèques, modèles et exemples de mise en œuvre
Travail avec les dates en Swift (iOS/macOS) : bibliothèques et outils
ORM pour Rust : comparaison et exemples d'utilisation de Diesel, SeaORM et SQLx
Java Image I/O API : redimensionnement et recadrage d'images | Guide