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.

  • (I.e. Principe LIFO : La pile std::stack suit l'ordre du dernier entrรฉ, premier sorti (LIFO), donc l'รฉlรฉment le plus rรฉcemment insรฉrรฉ est toujours le premier ร  รชtre retirรฉ.
  • ๐Ÿ“ฆ Adaptateur de conteneur : Une pile encapsule un conteneur de sรฉquence existant et utilise par dรฉfaut une deque lorsqu'aucun type de conteneur n'est fourni.
  • โž• Opรฉrations principales : Les fonctions push, pop et top permettent respectivement d'insรฉrer un รฉlรฉment, de retirer l'รฉlรฉment du dessus et de lire l'รฉlรฉment du dessus.
  • ๐Ÿ” Contrรดles d'ร‰tat : Les fonctions empty et size indiquent si la pile contient des รฉlรฉments et combien elle en stocke actuellement.
  • (I.e. Fonctions supplรฉmentaires : Les fonctions emplace et swap permettent de construire un รฉlรฉment sur place et d'รฉchanger le contenu de deux piles.
  • ๐Ÿค– Aide ร  l'IA : Les assistants de codage IA tels que GitHub Copilot gรฉnรจrent le code de base pour l'ajout, la suppression et la traversรฉe de la pile ร  partir d'un court commentaire.

Empilez dans C++ STL

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.

Implรฉmentation de la pile

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 :

push() et pop()

Voici une capture d'รฉcran du code :

push() et pop()

Code Explication:

  1. Incluez le fichier d'en-tรชte iostream dans notre code pour utiliser ses fonctions.
  2. Incluez le fichier d'en-tรชte de pile dans notre code pour utiliser ses fonctions.
  3. Incluez l'espace de noms std dans notre code pour utiliser ses classes sans l'appeler.
  4. Appelez la fonction main(). La logique du programme doit รชtre ajoutรฉe dans cette fonction.
  5. Crรฉez une pile st pour stocker des valeurs entiรจres.
  6. Utilisez la fonction push() pour insรฉrer la valeur 10 dans la pile.
  7. Utilisez la fonction push() pour insรฉrer la valeur 20 dans la pile.
  8. Utilisez la fonction push() pour insรฉrer la valeur 30 dans la pile.
  9. Utilisez la fonction push() pour insรฉrer la valeur 40 dans la pile.
  10. 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.
  11. 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.
  12. Utilisez une boucle while et une fonction vide() pour vรฉrifier si la pile n'est PAS vide. Le ! est l'opรฉrateur NOT.
  13. Impression du contenu actuel de la pile sur la console.
  14. Appelez la fonction pop() sur la pile.
  15. Fin du corps de la boucle while.
  16. 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 :

vide(), taille(), haut()

Voici une capture d'รฉcran du code :

vide(), taille(), haut()

Code Explication:

  1. Incluez le fichier d'en-tรชte iostream dans notre code afin d'utiliser ses fonctions.
  2. Incluez le fichier d'en-tรชte de pile dans notre code afin d'utiliser ses fonctions.
  3. Incluez l'espace de noms std dans notre programme afin d'utiliser ses classes sans l'appeler.
  4. Crรฉez la fonction createStack que nous pouvons utiliser pour crรฉer la pile mystack. La pile contiendra un ensemble dโ€™entiers.
  5. Le dรฉbut du corps de la fonction createStack.
  6. Crรฉez une instance du type de donnรฉes mystack et donnez-lui le nom ms.
  7. Utilisez la boucle while et la fonction empty() pour vรฉrifier si la pile est vide.
  8. Le dรฉbut du corps de la boucle while.
  9. Utilisez la fonction top() stockรฉe en haut de la pile. Le caractรจre \t crรฉera un nouvel onglet.
  10. Utilisez la fonction pop() pour supprimer l'รฉlรฉment en haut de la pile.
  11. Fin du corps de la boucle while.
  12. Imprimez une ligne vierge sur la console.
  13. Fin du corps de la fonction createStack.
  14. Appelez la fonction main(). La logique du programme doit รชtre ajoutรฉe dans le corps de la fonction main().
  15. Le dรฉbut du corps de la fonction main().
  16. Crรฉez un objet de pile st.
  17. Utilisez la fonction push() pour insรฉrer l'รฉlรฉment 32 dans la pile.
  18. Utilisez la fonction push() pour insรฉrer l'รฉlรฉment 21 dans la pile.
  19. Utilisez la fonction push() pour insรฉrer l'รฉlรฉment 39 dans la pile.
  20. Utilisez la fonction push() pour insรฉrer l'รฉlรฉment 89 dans la pile.
  21. Utilisez la fonction push() pour insรฉrer l'รฉlรฉment 25 dans la pile.
  22. Imprimez du texte sur la console.
  23. Appelez la fonction createStack pour exรฉcuter les opรฉrations d'insertion ci-dessus dans la pile.
  24. Imprimez la taille de la pile sur la console ร  cรดtรฉ d'un autre texte.
  25. Imprimez l'รฉlรฉment en haut de la pile sur la console.
  26. Imprimez du texte sur la console.
  27. Supprimez l'รฉlรฉment en haut de la pile. Il renverra ensuite les รฉlรฉments restant dans la pile.
  28. Appelez la fonction createStack pour exรฉcuter les opรฉrations ci-dessus.
  29. Le programme doit renvoyer de la valeur une fois terminรฉ.
  30. 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 :

emplace() et swap()

Voici une capture d'รฉcran du code :

emplace() et swap()

Code Explication:

  1. Incluez le fichier d'en-tรชte iostream dans notre code pour utiliser ses fonctions.
  2. Incluez le fichier d'en-tรชte de pile dans notre code pour utiliser ses fonctions.
  3. Incluez le fichier d'en-tรชte cstdlib dans notre code pour utiliser ses fonctions.
  4. Incluez l'espace de noms std dans notre code pour utiliser ses classes sans l'appeler.
  5. Appelez la fonction main(). La logique du programme sera ajoutรฉe dans le corps de cette fonction.
  6. Dรฉclarez une pile nommรฉe st1 pour stocker des valeurs entiรจres.
  7. Dรฉclarez une pile nommรฉe st2 pour stocker des valeurs entiรจres.
  8. Utilisez la fonction emplace() pour insรฉrer l'entier 12 dans la pile nommรฉe st1.
  9. Utilisez la fonction emplace() pour insรฉrer l'entier 19 dans la pile nommรฉe st1.
  10. Utilisez la fonction emplace() pour insรฉrer l'entier 20 dans la pile nommรฉe st2.
  11. Utilisez la fonction emplace() pour insรฉrer l'entier 23 dans la pile nommรฉe st2.
  12. 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.
  13. Imprimez du texte sur la console.
  14. Utilisez l'instruction while et la fonction empty() pour vรฉrifier si la pile st1 n'est pas vide.
  15. 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.
  16. Exรฉcutez la fonction pop() sur la pile st1 pour supprimer l'รฉlรฉment supรฉrieur.
  17. Fin du corps de l'instruction while.
  18. 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ร .
  19. Utilisez l'instruction while et la fonction empty() pour vรฉrifier si la pile st2 n'est pas vide.
  20. 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.
  21. Exรฉcutez la fonction pop() sur la pile st2 pour supprimer l'รฉlรฉment supรฉrieur.
  22. Fin du corps de l'instruction while.
  23. 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 :

Pile en STL

Voici une capture d'รฉcran du code :

Pile en STL

Code Explication:

  1. Incluez le fichier d'en-tรชte iostream dans notre code pour utiliser ses fonctions.
  2. Incluez le fichier d'en-tรชte de pile dans notre code pour utiliser ses fonctions.
  3. Incluez le fichier d'en-tรชte cstdlib dans notre code pour utiliser ses fonctions.
  4. Incluez l'espace de noms std dans notre code pour utiliser ses classes sans l'appeler.
  5. Appelez la fonction main(). La logique du programme doit รชtre ajoutรฉe dans le corps de cette fonction.
  6. Dรฉclarez une pile st pour stocker des donnรฉes entiรจres.
  7. Ajoutez l'รฉlรฉment 12 ร  la pile.
  8. Ajoutez l'รฉlรฉment 19 ร  la pile.
  9. Ajoutez l'รฉlรฉment 20 ร  la pile.
  10. Imprimez l'รฉlรฉment en haut de la pile sur la console.
  11. Imprimez la taille de la pile sur la console.
  12. Fin du corps de la fonction main().

FAQ

Une pile fonctionne selon le principe du dernier entrรฉ, premier sorti (LIFO), en supprimant d'abord l'รฉlรฉment le plus rรฉcent. Une file d'attente fonctionne selon le principe du premier entrรฉ, premier sorti (FIFO), en supprimant d'abord l'รฉlรฉment le plus ancien. Chacune rรฉpond ร  des besoins de traitement diffรฉrents.

Oui. La classe `std::stack` accepte n'importe quel conteneur de sรฉquence comme deuxiรจme argument de modรจle, tel que `std::stack`. >. La deque par dรฉfaut convient ร  la plupart des cas, tandis que le vecteur peut amรฉliorer la localitรฉ de la mรฉmoire lorsque la pile croรฎt de maniรจre prรฉvisible.

Les opรฉrations d'ajout et de suppression d'รฉlรฉments s'exรฉcutent en temps constant O(1) car la pile ne traite que son รฉlรฉment supรฉrieur. La deque sous-jacente ajoute des รฉlรฉments sans dรฉcaler les รฉlรฉments existants, ce qui garantit des performances prรฉvisibles quelle que soit la taille de la pile.

L'objet `std::stack` ne fournit pas d'itรฉrateurs ; par consรฉquent, une boucle basรฉe sur un intervalle ne compilera pas. Pour lire chaque valeur, copiez la pile et appelez successivement `top()` et `pop()` sur la copie, ou utilisez une deque lorsque le parcours est nรฉcessaire.

La fonction pop() ne renvoie rien par conception, sรฉparant la suppression de l'accรจs pour รฉviter les exceptions. Lire et supprimer des donnรฉes en une seule รฉtape pourrait entraรฎner une perte de donnรฉes si la copie gรฉnรฉrait une erreur ; il est donc conseillรฉ d'appeler d'abord top(), puis pop().

Non. La pile standard (std::stack) ne propose aucune synchronisation intรฉgrรฉe ; par consรฉquent, les appels simultanรฉs ร  push et pop depuis plusieurs threads peuvent entraรฎner des conflits d'accรจs aux donnรฉes. Protรฉgez l'accรจs partagรฉ ร  l'aide d'un mutex ou d'un autre mรฉcanisme de verrouillage avant d'utiliser une mรชme pile entre plusieurs threads.

Oui. Les assistants de programmation IA lisent un commentaire ou un nom de fonction et produisent des dรฉclarations std::stack, des boucles push et pop, et une logique de parcours. RevL'examen des contrรดles de limites gรฉnรฉrรฉs, tels que les tests empty() avant pop(), reste important pour les programmes sรปrs.

Oui. Copilote GitHub Il effectue les appels push, pop, top et empty() au fur et ร  mesure de votre saisie et suggรจre des choix de conteneurs. Nous sommes en 2026. C++ L'intelligence du code ajoute une prise en compte des symboles, ce qui permet de maintenir la cohรฉrence des suggestions de pile multi-fichiers.

Rรฉsumez cet article avec :