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é).
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é.
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é.
#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 : listOpérations
| Fonction | Description |
|---|---|
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() 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;
}Sommet : 30 Taille : 5 Éléments restants (ordre LIFO) : 70 50 20 10 Taille finale : 0
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.