La classe stack (Pile) en C++ (bibliothèque STL) <stack>

10 Feb 2022 10 Feb 2022 3801 vues ESSADDOUKI Mostafa 3 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

Les adaptateurs de conteneur STL

La STL définit trois adaptateurs de conteneur qui offrent une interface simplifiée bâtie sur un conteneur sous-jacent : stack (Pile), queue (File d'attente) et priority_queue (File de priorité).

Pas d'itérateurs Les adaptateurs de conteneur ne fournissent pas de fonctions begin() / end(). Il est donc impossible de leur appliquer les algorithmes génériques de la STL (comme std::sort ou std::find).

La classe stack (Pile)

La classe stack, définie dans <stack>, est un adaptateur conçu pour trois opérations : push (empiler), pop (dépiler) et top (sommet). Elle suit le principe LIFO (Last In, First Out) : le dernier élément inséré est le premier retiré.

Principe LIFO Les éléments sont ajoutés (push) et supprimés (pop) à partir de la même extrémité : le sommet de la pile, qui correspond à l'arrière (back) du conteneur sous-jacent.

Conteneur sous-jacent

La pile délègue son stockage à un conteneur qui doit supporter les opérations empty, size, back, push_back et pop_back. Les conteneurs vector, deque et list remplissent ces conditions. Par défaut, c'est deque qui est utilisé.

   
Déclaration C++
#include <stack>

stack<type_objets> nomPile;                       // Conteneur sous-jacent : deque (défaut)
stack<type_objets, vector<type_objets>> nomPile;  // Conteneur sous-jacent : vector
stack<type_objets, list<type_objets>>   nomPile;  // Conteneur sous-jacent : list

Opérations

FonctionDescription
bool empty()Retourne true si la pile est vide (taille nulle).
size_type size()Renvoie le nombre d'éléments dans la pile.
reference top()Renvoie une référence au sommet — le dernier élément inséré.
void push(val)Insère val au sommet de la pile.
void pop()Supprime l'élément au sommet — réduit la taille de 1.
pop() ne retourne rien pop() supprime le sommet sans le retourner. Pour récupérer la valeur avant suppression, il faut d'abord appeler top(), puis pop().

Exemple complet

#include <iostream>
#include <stack>
using namespace std;

int main() {
    stack<int> pile;
    pile.push(10);
    pile.push(20);
    pile.push(50);
    pile.push(70);
    pile.push(30);

    cout << "Sommet : " << pile.top()  << '\n';
    cout << "Taille : " << pile.size() << '\n';

    pile.pop();  // Supprimer 30 (sommet)

    // Afficher et vider la pile
    cout << "Éléments restants (ordre LIFO) : ";
    while (!pile.empty()) {
        cout << pile.top() << ' ';
        pile.pop();
    }
    cout << '\n';

    cout << "Taille finale : " << pile.size() << '\n';
    return 0;
}
Sortie
Sommet : 30
Taille : 5
Éléments restants (ordre LIFO) : 70 50 20 10
Taille finale : 0
Parcourir une pile Il n'existe pas d'itérateur pour stack. Le seul moyen de parcourir tous les éléments est de lire top() puis appeler pop() en boucle — ce qui vide la pile. Si on souhaite conserver les éléments, il faut les stocker dans un autre conteneur avant le parcours.

Discussion (0)

Soyez le premier à laisser un commentaire !

Laisser un commentaire

Votre commentaire sera visible après modération.