Stables ind C++ STL med Eksempel
โก Smart opsummering
Stables ind C++ STL implementerer en LIFO-containeradapter, der tilfรธjer og fjerner elementer fra en enkelt ende, wrapping en underliggende sekvensbeholder sรฅsom deque, vector eller list til at administrere ordnede data.

Hvad er std::stack?
En stak er en datastruktur, der fungerer baseret pรฅ LIFO (Last In First Out) teknik. Std::-stakken tillader kun at tilfรธje og fjerne elementer fra den ene ende.
std::stack-klassen er en containeradapter. Containerobjekter indeholder data af en lignende datatype. Du kan oprette en stak fra forskellige sekvenscontainere. Hvis der ikke angives en container, bruges deque-containeren som standard. Containeradaptere understรธtter ikke iteratorer, sรฅ de kan ikke bruges til at manipulere data.
Staksyntaks
For at oprette en stak skal vi inkludere header-fil i vores kode. Vi bruger derefter denne syntaks til at definere std::stack:
template <class Type, class Container = deque<Type> > class stack;
- Type โ er den type element, der er indeholdt i std::stakken. Det kan vรฆre enhver gyldig C++ type eller endda en brugerdefineret type.
- Container โ er typen af โโunderliggende containerobjekt.
Medlemstyper
Her er stackmedlemstyper:
- vรฆrditypeโ Den fรธrste skabelonparameter, T. Den angiver elementtyperne.
- containertypeโ Den anden skabelonparameter, Container. Den angiver den underliggende containertype.
- stรธrrelsestypeโ Usigneret integraltype.
Operationer i Stack
A C++ stack understรธtter fรธlgende grundlรฆggende handlinger:
- skub โ Den tilfรธjer/skubber et element ind i stakken.
- pop โ Den fjerner/popper en genstand ud af stakken.
- peek โ Returnerer det รธverste element i stakken uden at fjerne det.
- erFuld โ Kontrollerer om en stak er fuld.
- er tom โ Kontrollerer om en stak er tom.
Stakimplementering
De fรธlgende trin viser, hvordan toppen af โโstakken forskydes, nรฅr genstande skubbes og derefter poppes op:
Trin 1) Vi har oprindeligt en tom stak. Toppen af โโen tom stak sรฆttes til -1.
Trin 2) Dernรฆst har vi skubbet element 5 ind i stakken. Toppen af โโstakken vil pege mod element 5.
Trin 3) Dernรฆst har vi skubbet element 50 ind i stakken. Toppen af โโstakken forskydes og peger mod element 50.
Trin 4) Vi har derefter udfรธrt en pop-operation, hvor vi fjerner det รธverste element fra stakken. Element 50 poppes ud af stakken. Toppen af โโstakken peger nu pรฅ element 5.
push() og pop()
Funktionen stack::push() tilfรธjer et nyt element รธverst i stakken. Stรธrrelsen pรฅ stakken รธges med 1 efter indsรฆttelsen. Funktionen bruger denne syntaks:
stack.push(value)
Vรฆrdien er det element, der skal indsรฆttes i stakken.
Funktionen stack::pop() fjerner det รธverste element i stakken. Dette er det nyeste element i stakken. Stรธrrelsen pรฅ stakken reduceres med 1 efter fjernelsen. Her er funktionens syntaks:
stack.pop()
Funktionen tager ingen parametre.
Eksempel 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(); } }
Output:
Her er et skรฆrmbillede af koden:
Code Forklaring:
- Inkluder iostream-headerfilen i vores kode for at bruge dens funktioner.
- Inkluder stackheader-filen i vores kode for at bruge dens funktioner.
- Inkluder std-navneomrรฅdet i vores kode for at bruge dets klasser uden at kalde det.
- Kald funktionen main(). Programlogikken skal tilfรธjes i denne funktion.
- Opret en stak st for at gemme heltalsvรฆrdier.
- Brug push()-funktionen til at indsรฆtte vรฆrdien 10 i stakken.
- Brug push()-funktionen til at indsรฆtte vรฆrdien 20 i stakken.
- Brug push()-funktionen til at indsรฆtte vรฆrdien 30 i stakken.
- Brug push()-funktionen til at indsรฆtte vรฆrdien 40 i stakken.
- Brug pop()-funktionen til at fjerne det รธverste element fra stakken, det vil sige 40. Det รธverste element bliver nu 30.
- Brug pop()-funktionen til at fjerne det รธverste element fra stakken, det vil sige 30. Det รธverste element bliver nu 20.
- Brug en while-lรธkke og en tomme()-funktion til at kontrollere, om stakken IKKE er tom. Den ! er NOT-operatรธren.
- Udskrivning af det aktuelle indhold af stakken pรฅ konsollen.
- Kald pop()-funktionen pรฅ stakken.
- Slut pรฅ mens-lรธkkens krop.
- Slutningen af โโhoved() funktionsteksten.
tomme(), stรธrrelse(), top()
Stakke har indbyggede funktioner, som du kan bruge til at lege med stakken og dens vรฆrdier. Disse omfatter:
- tom()โ kontrollerer om en stak er tom eller ej.
- stรธrrelse()โ returnerer stรธrrelsen af โโstakken, det vil sige antallet af elementer i en stak.
- top()โ tilgรฅr stakelementet รธverst.
Eksempel 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; }
Output:
Her er et skรฆrmbillede af koden:
Code Forklaring:
- Inkluder iostream-headerfilen i vores kode for at bruge dens funktioner.
- Inkluder stackheader-filen i vores kode for at bruge dens funktioner.
- Inkluder std-navneomrรฅdet i vores program for at bruge dets klasser uden at kalde det.
- Opret funktionen createStack, som vi kan bruge til at oprette stack mystack. Stakken vil indeholde et sรฆt heltal.
- Begyndelsen af โโkroppen af โโcreateStack-funktionen.
- Opret en forekomst af mystack-datatypen og giv den navnet ms.
- Brug while-lรธkken og funktionen empty() til at kontrollere, om stakken er tom.
- Starten pรฅ kroppen af โโwhile-lรธkken.
- Brug top()-funktionen, der er gemt รธverst i stakken. Tegnet \t vil oprette en ny fane.
- Brug pop()-funktionen til at slette elementet รธverst i stakken.
- Slut pรฅ mens-lรธkkens krop.
- Udskriv en tom linje pรฅ konsollen.
- Slutningen af โโbrรธdteksten af โโcreateStack-funktionen.
- Kald funktionen main(). Programlogikken skal tilfรธjes i hoveddelen af โโfunktionen main().
- Starten af โโkroppen af โโfunktion main().
- Opret et stabelobjekt st.
- Brug push()-funktionen til at indsรฆtte elementet 32 โโi stakken.
- Brug push()-funktionen til at indsรฆtte elementet 21 โโi stakken.
- Brug push()-funktionen til at indsรฆtte elementet 39 โโi stakken.
- Brug push()-funktionen til at indsรฆtte elementet 89 โโi stakken.
- Brug push()-funktionen til at indsรฆtte elementet 25 โโi stakken.
- Udskriv noget tekst pรฅ konsollen.
- Kald createStack-funktionen for at udfรธre ovenstรฅende indsรฆttelsesoperationer i stakken.
- Udskriv stรธrrelsen af โโstakken pรฅ konsollen sammen med anden tekst.
- Udskriv elementet รธverst i stakken pรฅ konsollen.
- Udskriv noget tekst pรฅ konsollen.
- Slet elementet รธverst i stakken. Det vil derefter returnere de resterende elementer i stakken.
- Kald createStack-funktionen for at udfรธre ovenstรฅende operationer.
- Programmet skal returnere vรฆrdi efter vellykket afslutning.
- Slutningen af โโhoveddelen af โโfunktion main().
emplace() og swap()
Disse er andre indbyggede stakfunktioner:
- indsรฆtte()โ konstruerer og indsรฆtter derefter et nyt element รธverst i stakken.
- bytte()โ udveksler stakindholdet med en anden staks indhold.
Eksempel 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(); } }
Output:
Her er et skรฆrmbillede af koden:
Code Forklaring:
- Inkluder iostream-headerfilen i vores kode for at bruge dens funktioner.
- Inkluder stackheader-filen i vores kode for at bruge dens funktioner.
- Inkluder cstdlib-headerfilen i vores kode for at bruge dens funktioner.
- Inkluder std-navneomrรฅdet i vores kode for at bruge dets klasser uden at kalde det.
- Kald funktionen main(). Programlogikken vil blive tilfรธjet i denne funktions brรธdtekst.
- Erklรฆre en stak ved navn st1 for at gemme heltalsvรฆrdier.
- Erklรฆre en stak ved navn st2 for at gemme heltalsvรฆrdier.
- Brug emplace()-funktionen til at indsรฆtte hele tallet 12 i stakken med navnet st1.
- Brug emplace()-funktionen til at indsรฆtte hele tallet 19 i stakken med navnet st1.
- Brug emplace()-funktionen til at indsรฆtte hele tallet 20 i stakken med navnet st2.
- Brug emplace()-funktionen til at indsรฆtte hele tallet 23 i stakken med navnet st2.
- Brug swap()-funktionen til at bytte indholdet af de to stakke, st1 og st2. Indholdet af stakken st1 skal flyttes til stakken st2. Indholdet af stakken st2 skal flyttes til stakken st1.
- Udskriv noget tekst pรฅ konsollen.
- Brug while-sรฆtningen og funktionen empty() til at kontrollere, om stakken st1 ikke er tom.
- Udskriv indholdet af stakken st1 pรฅ konsollen. " " tilfรธjer plads mellem stakelementerne, nรฅr de udskrives pรฅ konsollen.
- Udfรธr pop()-funktionen pรฅ stakken st1 for at fjerne det รธverste element.
- Slutningen af โโbrรธdteksten af โโwhile-erklรฆringen.
- Udskriv noget tekst pรฅ konsollen. Endl er en C++ nรธgleord for slutlinje. Den flytter musemarkรธren til nรฆste linje for at begynde udskrivningen derfra.
- Brug while-sรฆtningen og funktionen empty() til at kontrollere, om stakken st2 ikke er tom.
- Udskriv indholdet af stakken st2 pรฅ konsollen. " " tilfรธjer plads mellem stakelementerne, nรฅr de udskrives pรฅ konsollen.
- Udfรธr pop()-funktionen pรฅ stakken st2 for at fjerne det รธverste element.
- Slutningen af โโbrรธdteksten af โโwhile-erklรฆringen.
- Slutningen af โโhoveddelen af โโfunktionen main().
Stak i STL
STL (Standard Template Library) kommer med skabelonklasser, der giver fรฆlles C++ datastrukturer. Derfor kan en stack ogsรฅ implementeres i STL. Vi inkluderer simpelthen dette bibliotek i vores kode og bruger det til at definere en stak.
stack<T> st;
Ovenstรฅende syntaks erklรฆrer en stack st til elementer af datatype T.
Eksempel 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(); }
Output:
Her er et skรฆrmbillede af koden:
Code Forklaring:
- Inkluder iostream-headerfilen i vores kode for at bruge dens funktioner.
- Inkluder stackheader-filen i vores kode for at bruge dens funktioner.
- Inkluder cstdlib-headerfilen i vores kode for at bruge dens funktioner.
- Inkluder std-navneomrรฅdet i vores kode for at bruge dets klasser uden at kalde det.
- Kald funktionen main(). Programlogikken skal tilfรธjes i denne funktions brรธdtekst.
- Erklรฆre en stak st for at gemme heltalsdata.
- Tilfรธj element 12 til stakken.
- Tilfรธj element 19 til stakken.
- Tilfรธj element 20 til stakken.
- Udskriv elementet รธverst i stakken pรฅ konsollen.
- Udskriv stakkens stรธrrelse pรฅ konsollen.
- Slutningen af โโkroppen af โโfunktionen main().






