Introduction à la bibliothèque de Template Standard STL

22 Nov 2021 22 Nov 2021 3376 vues ESSADDOUKI Mostafa 6 min de lecture
Introduction et syntaxe de base
1 Introduction au langage C++ 2 Entrée-sortie en C++ - cin et cout 3 Inférence de type avec le mot-clé auto en C++ 4 Classe std::string et les chaînes de caractères en C++ 5 Les structures conditionnelles (if et switch) en C++ (C++17 et C++20) 6 Les boucles en C++ (C++17 et C++20) 7 La gestion des fichiers en C++
Pointeurs et fonctions
8 Introduction aux pointeurs en C++ - Déclaration et interêts 9 Les références en C++ - déclaration et interêts 10 Les tableaux en C++ - Déclaration et interêts 11 Introduction aux fonctions en C++ 12 Passer des arguments à une fonction en C++ 13 Déclarer un paramètre const en C++ 14 Les fonctions Lambda en C++ 15 Fonctions utiles (Mathématiques et caractères) en C++
Programmation OO
16 Classes et objets en C++ 17 Spécificateurs d'accès en C++ 18 Constructeurs et destructeur d'une classe en C++ 19 Fonctions membres en C++ 20 Membres statiques d'une classe en C++ 21 Fonctions en ligne en C++ - inline 22 Fonctions et classes amies en C++ - friend 23 Surcharge des fonctions en C++ 24 Surcharge des opérateurs en C++ 25 Héritage en C++ 26 La gestion d'exceptions en C++ : déclaration, utilisation et personnalisation 27 fonctions et classes templates en C++ 28 Les nouveautés C++20 pour améliorer les templates en C++
Structures de données
29 Introduction aux structures de données 30 Les structures en C++ et la différence avec les structures en C 31 Les listes chaînées en C++ 32 Les piles en C++ 33 File d'attente en C++ 34 Arbre binaire de recherche : définition et mise en oeuvre en C++
La bibliothèque standard (STL)
35 Introduction à la bibliothèque de Template Standard STL 36 Les itérateurs en C++ - définition, déclaration et exemples 37 La classe array en C++ (bibliothèque STL) <array> 38 La classe vector de la bibliothèque STL <vector> 39 La classe deque en C++ ( Bibliothèque STL) 40 La classe list en C++ (bibliothèque STL) <list> 41 La classe stack (Pile) en C++ (bibliothèque STL) <stack> 42 La classe queue (File d'attente) en C++ (bibliothèque STL) <queue> 43 La file d'attente prioritaire (classe priority_queue) - Bibliothèque STL 44 Les ensembles en C++ (Classe set <set> - Bibliothèque STL) 45 Les dictionnaires en C++ : Classe map (Bibliothèque STL) 46 Introduction aux algorithmes de la bibliothèque STL (programmation compétitive) 47 Tri et méthodes associées en C++ - Bibliothèque STL 48 Recherche dichotomique et méthodes associées en C++ - Bibliothèque STL 49 Appliquer un prédicat ou une fonction aux éléments d'une séquence en C++ - Bibliothèque STL 50 Recherche dans une séquence et méthodes associées en C++ - Bibliothèque STL

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.

Trois piliers de la STLLa STL se compose de trois éléments complémentaires qui s'articulent ensemble :
  • Conteneurs — stockent les données.
  • Algorithmes — opèrent sur les données des conteneurs.
  • Itérateurs — relient les conteneurs aux algorithmes.
Cette abstraction de la programmation générique permet de combiner algorithmes et conteneurs de manière universelle, sans contraindre le type des éléments.

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 :

ConteneurCaractéristique principale
std::vectorTaille dynamique, gestion automatique de la mémoire, performances élevées. Choix par défaut.
std::arrayTaille fixe à la compilation. Surcharge mémoire et CPU minimale.
std::dequeInsertion efficace en début et en fin.
std::listListe doublement chaînée. Insertions/suppressions rapides à n'importe quelle position.
std::forward_listListe 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éesClés non ordonnées (table de hachage)
std::setstd::unordered_set
std::mapstd::unordered_map
std::multisetstd::unordered_multiset
std::multimapstd::unordered_multimap

Adaptateurs de conteneurs

Les adaptateurs fournissent une interface simplifiée aux conteneurs de séquence. C++ propose trois adaptateurs :

AdaptateurDescription
std::stackInterface LIFO (pile)
std::queueInterface FIFO (file d'attente)
std::priority_queueFile 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égorieDescriptionExemples
Non mutantsNe modifient pas la structure du conteneurRecherche, comptage, comparaison
MutantsModifient la structureGénération, remplacement, suppression
TriRéorganisent les élémentsTri, permutation, partitionnement
NumériquesAppliquent des opérations mathématiquesSomme, produit, min/max
Exécution parallèle (C++17) En spécifiant une politique d'exécution, la plupart des algorithmes peuvent s'exécuter de manière séquentielle, parallèle ou parallèle et vectorisée.

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.

Rôle clé des itérateurs Un algorithme STL ne travaille pas directement sur un conteneur : il utilise des itérateurs. Cela signifie qu'un seul algorithme peut être appliqué à n'importe quel conteneur qui fournit le type d'itérateur requis — sans réécrire l'algorithme pour chaque type.

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>
Toujours déclarer explicitement les en-têtes Le compilateur peut parfois inclure des en-têtes supplémentaires automatiquement, mais il ne faut pas s'y fier. Une mise à jour du compilateur ou un portage de code peut provoquer une erreur de compilation si des en-têtes nécessaires ne sont pas explicitement déclarés.

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();
Risque d'ambiguïté Si le même nom est déclaré dans la même portée de visibilité, une erreur de compilation se produit par ambiguïté.

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é
Pièges de la directive using namespace
  • 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.