Empilez dans C++ STL avec exemple
โก Rรฉsumรฉ intelligent
Empilez dans C++ La STL implรฉmente un adaptateur de conteneur LIFO qui ajoute et supprime des รฉlรฉments ร partir d'une seule extrรฉmitรฉ, en les encapsulant.ping un conteneur de sรฉquence sous-jacent tel qu'une deque, un vecteur ou une liste pour gรฉrer les donnรฉes ordonnรฉes.

Qu'est-ce que std::stack ?
Une pile est une structure de donnรฉes qui fonctionne sur la base de la technique LIFO (Last In First Out). Le std::stack permet d'ajouter et de supprimer des รฉlรฉments ร une seule extrรฉmitรฉ.
La classe `std::stack` est un adaptateur de conteneur. Les objets conteneurs contiennent des donnรฉes de mรชme type. Vous pouvez crรฉer une pile ร partir de diffรฉrents conteneurs de sรฉquence. Si aucun conteneur n'est fourni, le conteneur `deque` sera utilisรฉ par dรฉfaut. Les adaptateurs de conteneur ne prennent pas en charge les itรฉrateurs ; ils ne peuvent donc pas รชtre utilisรฉs pour manipuler des donnรฉes.
Syntaxe de la pile
Pour crรฉer une pile, nous devons inclure le fichier dโen-tรชte dans notre code. Nous utilisons ensuite cette syntaxe pour dรฉfinir le std::stack :
template <class Type, class Container = deque<Type> > class stack;
- Type โ est le type dโรฉlรฉment contenu dans std::stack. Cela peut รชtre n'importe quel valide C++ type ou mรชme un type dรฉfini par l'utilisateur.
- Contenant โ est le type de lโobjet conteneur sous-jacent.
Types de membres
Voici les types de membres de la pile :
- type_valeurโ Le premier paramรจtre de modรจle, T. Il dรฉsigne les types d'รฉlรฉments.
- type_de_conteneurโ Le deuxiรจme paramรจtre du modรจle, Container, dรฉsigne le type de conteneur sous-jacent.
- type_tailleโ Type entier non signรฉ.
Operation dans la pile
A C++ la pile prend en charge les opรฉrations de base suivantes :
- pousser โ Il ajoute/pousse un รฉlรฉment dans la pile.
- pop โ Elle retire/dรฉpile un รฉlรฉment de la pile.
- coup d'oeil โ Renvoie l'รฉlรฉment du dessus de la pile sans le supprimer.
- estple โ Vรฉrifie si une pile est pleine.
- est vide โ Vรฉrifie si une pile est vide.
Implรฉmentation de la pile
Les รฉtapes suivantes montrent comment le haut de la pile se dรฉplace lorsque des รฉlรฉments sont ajoutรฉs puis retirรฉs :
รtape 1) Nous avons initialement une pile vide. Le sommet d'une pile vide est initialisรฉ ร -1.
รtape 2) Ensuite, nous avons empilรฉ l'รฉlรฉment 5. Le sommet de la pile pointe dรฉsormais vers l'รฉlรฉment 5.
รtape 3) Ensuite, nous avons empilรฉ l'รฉlรฉment 50. Le sommet de la pile se dรฉplace et pointe vers l'รฉlรฉment 50.
รtape 4) Nous avons ensuite effectuรฉ une opรฉration de dรฉpilement, retirant ainsi l'รฉlรฉment du sommet de la pile. L'รฉlรฉment 50 a รฉtรฉ dรฉpilรฉ. Le sommet de la pile pointe dรฉsormais vers l'รฉlรฉment 5.
push() et pop()
La fonction stack::push() ajoute un nouvel รฉlรฉment au sommet de la pile. La taille de la pile est incrรฉmentรฉe de 1 aprรจs l'insertion. La fonction accepte la syntaxe suivante :
stack.push(value)
La valeur est l'รฉlรฉment ร insรฉrer dans la pile.
La fonction `stack::pop()` supprime l'รฉlรฉment du sommet de la pile, c'est-ร -dire l'รฉlรฉment le plus rรฉcent. La taille de la pile est rรฉduite de 1 aprรจs cette suppression. Voici la syntaxe de la fonction :
stack.pop()
La fonction ne prend aucun paramรจtre.
Exemple 1:
#include <iostream> #include <stack> using namespace std; int main() { stack<int> st; st.push(10); st.push(20); st.push(30); st.push(40); st.pop(); st.pop(); while (!st.empty()) { cout << ' ' << st.top(); st.pop(); } }
Sortie :
Voici une capture d'รฉcran du code :
Code Explication:
- Incluez le fichier d'en-tรชte iostream dans notre code pour utiliser ses fonctions.
- Incluez le fichier d'en-tรชte de pile dans notre code pour utiliser ses fonctions.
- Incluez l'espace de noms std dans notre code pour utiliser ses classes sans l'appeler.
- Appelez la fonction main(). La logique du programme doit รชtre ajoutรฉe dans cette fonction.
- Crรฉez une pile st pour stocker des valeurs entiรจres.
- Utilisez la fonction push() pour insรฉrer la valeur 10 dans la pile.
- Utilisez la fonction push() pour insรฉrer la valeur 20 dans la pile.
- Utilisez la fonction push() pour insรฉrer la valeur 30 dans la pile.
- Utilisez la fonction push() pour insรฉrer la valeur 40 dans la pile.
- Utilisez la fonction pop() pour supprimer l'รฉlรฉment supรฉrieur de la pile, c'est-ร -dire 40. L'รฉlรฉment supรฉrieur devient dรฉsormais 30.
- Utilisez la fonction pop() pour supprimer l'รฉlรฉment supรฉrieur de la pile, c'est-ร -dire 30. L'รฉlรฉment supรฉrieur devient dรฉsormais 20.
- Utilisez une boucle while et une fonction vide() pour vรฉrifier si la pile n'est PAS vide. Le ! est l'opรฉrateur NOT.
- Impression du contenu actuel de la pile sur la console.
- Appelez la fonction pop() sur la pile.
- Fin du corps de la boucle while.
- Fin du corps de la fonction main().
vide(), taille(), haut()
Les piles ont des fonctions intรฉgrรฉes que vous pouvez utiliser pour jouer avec la pile et ses valeurs. Ceux-ci inclus:
- vide()โ vรฉrifie si une pile est vide ou non.
- Taille()โ renvoie la taille de la pile, c'est-ร -dire le nombre d'รฉlรฉments dans la pile.
- Haut()โ accรจde ร l'รฉlรฉment de pile situรฉ en haut.
Exemple 2:
#include <iostream> #include <stack> using namespace std; void createStack(stack <int> mystack) { stack <int> ms = mystack; while (!ms.empty()) { cout << '\t' << ms.top(); ms.pop(); } cout << '\n'; } int main() { stack <int> st; st.push(32); st.push(21); st.push(39); st.push(89); st.push(25); cout << "The stack st is: "; createStack(st); cout << "\n st.size() : " << st.size(); cout << "\n st.top() : " << st.top(); cout << "\n st.pop() : "; st.pop(); createStack(st); return 0; }
Sortie :
Voici une capture d'รฉcran du code :
Code Explication:
- Incluez le fichier d'en-tรชte iostream dans notre code afin d'utiliser ses fonctions.
- Incluez le fichier d'en-tรชte de pile dans notre code afin d'utiliser ses fonctions.
- Incluez l'espace de noms std dans notre programme afin d'utiliser ses classes sans l'appeler.
- Crรฉez la fonction createStack que nous pouvons utiliser pour crรฉer la pile mystack. La pile contiendra un ensemble dโentiers.
- Le dรฉbut du corps de la fonction createStack.
- Crรฉez une instance du type de donnรฉes mystack et donnez-lui le nom ms.
- Utilisez la boucle while et la fonction empty() pour vรฉrifier si la pile est vide.
- Le dรฉbut du corps de la boucle while.
- Utilisez la fonction top() stockรฉe en haut de la pile. Le caractรจre \t crรฉera un nouvel onglet.
- Utilisez la fonction pop() pour supprimer l'รฉlรฉment en haut de la pile.
- Fin du corps de la boucle while.
- Imprimez une ligne vierge sur la console.
- Fin du corps de la fonction createStack.
- Appelez la fonction main(). La logique du programme doit รชtre ajoutรฉe dans le corps de la fonction main().
- Le dรฉbut du corps de la fonction main().
- Crรฉez un objet de pile st.
- Utilisez la fonction push() pour insรฉrer l'รฉlรฉment 32 dans la pile.
- Utilisez la fonction push() pour insรฉrer l'รฉlรฉment 21 dans la pile.
- Utilisez la fonction push() pour insรฉrer l'รฉlรฉment 39 dans la pile.
- Utilisez la fonction push() pour insรฉrer l'รฉlรฉment 89 dans la pile.
- Utilisez la fonction push() pour insรฉrer l'รฉlรฉment 25 dans la pile.
- Imprimez du texte sur la console.
- Appelez la fonction createStack pour exรฉcuter les opรฉrations d'insertion ci-dessus dans la pile.
- Imprimez la taille de la pile sur la console ร cรดtรฉ d'un autre texte.
- Imprimez l'รฉlรฉment en haut de la pile sur la console.
- Imprimez du texte sur la console.
- Supprimez l'รฉlรฉment en haut de la pile. Il renverra ensuite les รฉlรฉments restant dans la pile.
- Appelez la fonction createStack pour exรฉcuter les opรฉrations ci-dessus.
- Le programme doit renvoyer de la valeur une fois terminรฉ.
- Fin du corps de la fonction main().
emplace() et swap()
Voici d'autres fonctions de pile intรฉgrรฉes :
- emplace()โ construit puis insรจre un nouvel รฉlรฉment en haut de la pile.
- รฉchanger()โ รฉchange le contenu d'une pile avec le contenu d'une autre pile.
Exemple 3:
#include <iostream> #include <stack> #include <cstdlib> using namespace std; int main() { stack<int> st1; stack<int> st2; st1.emplace(12); st1.emplace(19); st2.emplace(20); st2.emplace(23); st1.swap(st2); cout << "st1 = "; while (!st1.empty()) { cout << st1.top() << " "; st1.pop(); } cout << endl << "st2 = "; while (!st2.empty()) { cout << st2.top() << " "; st2.pop(); } }
Sortie :
Voici une capture d'รฉcran du code :
Code Explication:
- Incluez le fichier d'en-tรชte iostream dans notre code pour utiliser ses fonctions.
- Incluez le fichier d'en-tรชte de pile dans notre code pour utiliser ses fonctions.
- Incluez le fichier d'en-tรชte cstdlib dans notre code pour utiliser ses fonctions.
- Incluez l'espace de noms std dans notre code pour utiliser ses classes sans l'appeler.
- Appelez la fonction main(). La logique du programme sera ajoutรฉe dans le corps de cette fonction.
- Dรฉclarez une pile nommรฉe st1 pour stocker des valeurs entiรจres.
- Dรฉclarez une pile nommรฉe st2 pour stocker des valeurs entiรจres.
- Utilisez la fonction emplace() pour insรฉrer l'entier 12 dans la pile nommรฉe st1.
- Utilisez la fonction emplace() pour insรฉrer l'entier 19 dans la pile nommรฉe st1.
- Utilisez la fonction emplace() pour insรฉrer l'entier 20 dans la pile nommรฉe st2.
- Utilisez la fonction emplace() pour insรฉrer l'entier 23 dans la pile nommรฉe st2.
- Utilisez la fonction swap() pour รฉchanger le contenu des deux piles, st1 et st2. Le contenu de la pile st1 doit รชtre dรฉplacรฉ vers la pile st2. Le contenu de la pile st2 doit รชtre dรฉplacรฉ vers la pile st1.
- Imprimez du texte sur la console.
- Utilisez l'instruction while et la fonction empty() pour vรฉrifier si la pile st1 n'est pas vide.
- Imprimez le contenu de la pile st1 sur la console. Le ยซ ยป ajoute de l'espace entre les รฉlรฉments de la pile lors de leur impression sur la console.
- Exรฉcutez la fonction pop() sur la pile st1 pour supprimer l'รฉlรฉment supรฉrieur.
- Fin du corps de l'instruction while.
- Imprimez du texte sur la console. La fin est un C++ mot-clรฉ pour la ligne de fin. Il dรฉplace le curseur de la souris vers la ligne suivante pour commencer l'impression ร partir de lร .
- Utilisez l'instruction while et la fonction empty() pour vรฉrifier si la pile st2 n'est pas vide.
- Imprimez le contenu de la pile st2 sur la console. Le ยซ ยป ajoute de l'espace entre les รฉlรฉments de la pile lors de leur impression sur la console.
- Exรฉcutez la fonction pop() sur la pile st2 pour supprimer l'รฉlรฉment supรฉrieur.
- Fin du corps de l'instruction while.
- Fin du corps de la fonction main().
Pile en STL
La STL (Standard Template Library) est livrรฉe avec des classes de modรจles qui fournissent des C++ structures de donnรฉes. Par consรฉquent, une pile peut รฉgalement รชtre implรฉmentรฉe en STL. Nous incluons simplement cette bibliothรจque dans notre code et l'utilisons pour dรฉfinir une pile.
stack<T> st;
La syntaxe ci-dessus dรฉclare une pile st aux รฉlรฉments de type de donnรฉes T.
Exemple 4:
#include <iostream> #include <stack> #include <cstdlib> using namespace std; int main() { stack<int> st; st.push(12); st.push(19); st.push(20); cout << st.top(); cout << st.size(); }
Sortie :
Voici une capture d'รฉcran du code :
Code Explication:
- Incluez le fichier d'en-tรชte iostream dans notre code pour utiliser ses fonctions.
- Incluez le fichier d'en-tรชte de pile dans notre code pour utiliser ses fonctions.
- Incluez le fichier d'en-tรชte cstdlib dans notre code pour utiliser ses fonctions.
- Incluez l'espace de noms std dans notre code pour utiliser ses classes sans l'appeler.
- Appelez la fonction main(). La logique du programme doit รชtre ajoutรฉe dans le corps de cette fonction.
- Dรฉclarez une pile st pour stocker des donnรฉes entiรจres.
- Ajoutez l'รฉlรฉment 12 ร la pile.
- Ajoutez l'รฉlรฉment 19 ร la pile.
- Ajoutez l'รฉlรฉment 20 ร la pile.
- Imprimez l'รฉlรฉment en haut de la pile sur la console.
- Imprimez la taille de la pile sur la console.
- Fin du corps de la fonction main().






