Stapla in C++ STL med Exempel
โก Smart sammanfattning
Stapla in C++ STL implementerar en LIFO-containeradapter som lรคgger till och tar bort element frรฅn en enda รคnde, wrapping en underliggande sekvensbehรฅllare sรฅsom deque, vektor eller lista fรถr att hantera ordnad data.

Vad รคr std::stack?
En stack รคr en datastruktur som fungerar baserat pรฅ LIFO-tekniken (Last In First Out). Med std::stack kan element lรคggas till och tas bort endast frรฅn ena รคnden.
Klassen std::stack รคr en containeradapter. Containerobjekt innehรฅller data av en liknande datatyp. Du kan skapa en stack frรฅn olika sekvensbehรฅllare. Om ingen container anges kommer deque-behรฅllaren att anvรคndas som standard. Containeradaptrar stรถder inte iteratorer, sรฅ de kan inte anvรคndas fรถr att manipulera data.
Stack syntax
Fรถr att skapa en stack mรฅste vi inkludera header-fil i vรฅr kod. Vi anvรคnder sedan denna syntax fรถr att definiera std::stack:
template <class Type, class Container = deque<Type> > class stack;
- Typ โ รคr den typ av element som finns i std::stacken. Den kan vara vilken som helst giltig C++ typ eller till och med en anvรคndardefinierad typ.
- Behรฅllare โ รคr typen av underliggande containerobjekt.
Medlemstyper
Hรคr รคr stackmedlemstyper:
- vรคrdetypโ Den fรถrsta mallparametern, T. Den anger elementtyperna.
- containertypโ Den andra mallparametern, Container. Den anger den underliggande containertypen.
- storlekstypโ Osignerad integraltyp.
Operationer i Stack
A C++ stack stรถder fรถljande grundlรคggande operationer:
- tryck โ Den lรคgger till/skjuter in ett objekt i stapeln.
- pop โ Den tar bort/poppar upp ett fรถremรฅl frรฅn hรถgen.
- titt โ Returnerar det รถversta objektet i stacken utan att ta bort det.
- รคrFull โ Kontrollerar om en stapel รคr full.
- รคr tom โ Kontrollerar om en stapel รคr tom.
Stackimplementering
Fรถljande steg visar hur toppen av stapeln fรถrskjuts nรคr fรถremรฅl trycks och sedan poppas upp:
Steg 1) Vi har initialt en tom stack. Toppen av en tom stack sรคtts till -1.
Steg 2) Sedan har vi tryckt in element 5 i stacken. Toppen av stacken kommer att peka mot element 5.
Steg 3) Hรคrnรคst har vi tryckt in element 50 i stacken. Toppen av stacken fรถrskjuts och pekar mot element 50.
Steg 4) Vi har sedan utfรถrt en pop-operation, dรคr vi tar bort det รถversta elementet frรฅn stacken. Element 50 poppas upp frรฅn stacken. Toppen av stacken pekar nu mot element 5.
push() och pop()
Funktionen stack::push() lรคgger till ett nytt objekt hรถgst upp i stacken. Stackstorleken รถkas med 1 efter infogningen. Funktionen anvรคnder fรถljande syntax:
stack.push(value)
Vรคrdet รคr objektet som ska infogas i stapeln.
Funktionen stack::pop() tar bort det รถversta elementet i stacken. Detta รคr det nyaste elementet i stacken. Stackstorleken minskas med 1 efter borttagningen. Hรคr รคr funktionens syntax:
stack.pop()
Funktionen tar inga parametrar.
Exempel 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(); } }
Produktion:
Hรคr รคr en skรคrmdump av koden:
Code Fรถrklaring:
- Inkludera iostream-huvudfilen i vรฅr kod fรถr att anvรคnda dess funktioner.
- Inkludera stackhuvudfilen i vรฅr kod fรถr att anvรคnda dess funktioner.
- Inkludera std-namnomrรฅdet i vรฅr kod fรถr att anvรคnda dess klasser utan att anropa det.
- Anropa main()-funktionen. Programlogiken bรถr lรคggas till i denna funktion.
- Skapa en stackst fรถr att lagra heltalsvรคrden.
- Anvรคnd push()-funktionen fรถr att infoga vรคrdet 10 i stacken.
- Anvรคnd push()-funktionen fรถr att infoga vรคrdet 20 i stacken.
- Anvรคnd push()-funktionen fรถr att infoga vรคrdet 30 i stacken.
- Anvรคnd push()-funktionen fรถr att infoga vรคrdet 40 i stacken.
- Anvรคnd pop()-funktionen fรถr att ta bort det รถversta elementet frรฅn stacken, det vill sรคga 40. Det รถversta elementet blir nu 30.
- Anvรคnd pop()-funktionen fรถr att ta bort det รถversta elementet frรฅn stacken, det vill sรคga 30. Det รถversta elementet blir nu 20.
- Anvรคnd en while loop och empty() funktion fรถr att kontrollera om stacken INTE รคr tom. Den ! รคr NOT-operatรถren.
- Skriver ut det aktuella innehรฅllet i stapeln pรฅ konsolen.
- Anropa pop()-funktionen i stacken.
- Slutet pรฅ while-loopens kropp.
- Slutet pรฅ huvuddelen () funktion.
tomma(), storlek(), topp()
Stackar har inbyggda funktioner som du kan anvรคnda fรถr att leka med stacken och dess vรคrden. Dessa inkluderar:
- tรถmma()โ kontrollerar om en stapel รคr tom eller inte.
- storlek()โ returnerar stackens storlek, det vill sรคga antalet element i en stack.
- bรคsta()โ รถppnar stackelementet hรถgst upp.
Exempel 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; }
Produktion:
Hรคr รคr en skรคrmdump av koden:
Code Fรถrklaring:
- Inkludera iostream-huvudfilen i vรฅr kod fรถr att kunna anvรคnda dess funktioner.
- Inkludera stackhuvudfilen i vรฅr kod fรถr att kunna anvรคnda dess funktioner.
- Inkludera std-namnomrรฅdet i vรฅrt program fรถr att kunna anvรคnda dess klasser utan att anropa det.
- Skapa funktionen createStack som vi kan anvรคnda fรถr att skapa stacken mystack. Hรถgen kommer att innehรฅlla en uppsรคttning heltal.
- Bรถrjan av kroppen fรถr createStack-funktionen.
- Skapa en instans av mystack-datatypen och ge den namnet ms.
- Anvรคnd while-loopen och funktionen empty() fรถr att kontrollera om stacken รคr tom.
- Bรถrjan av while-loopens kropp.
- Anvรคnd top()-funktionen lagrad รถverst i stacken. Tecknet \t skapar en ny flik.
- Anvรคnd pop()-funktionen fรถr att ta bort elementet รถverst i stacken.
- Slutet pรฅ while-loopens kropp.
- Skriv ut en tom rad pรฅ konsolen.
- Slutet pรฅ kroppen av createStack-funktionen.
- Anropa main()-funktionen. Programlogiken bรถr lรคggas till i huvuddelen av main()-funktionen.
- Bรถrjan av huvuddelen av funktion main().
- Skapa ett stackobjekt st.
- Anvรคnd push()-funktionen fรถr att infoga elementet 32 โโi stacken.
- Anvรคnd push()-funktionen fรถr att infoga elementet 21 โโi stacken.
- Anvรคnd push()-funktionen fรถr att infoga elementet 39 โโi stacken.
- Anvรคnd push()-funktionen fรถr att infoga elementet 89 โโi stacken.
- Anvรคnd push()-funktionen fรถr att infoga elementet 25 โโi stacken.
- Skriv ut lite text pรฅ konsolen.
- Anropa createStack-funktionen fรถr att utfรถra ovanstรฅende infogningsoperationer i stacken.
- Skriv ut stapelns storlek pรฅ konsolen tillsammans med annan text.
- Skriv ut elementet รถverst i stapeln pรฅ konsolen.
- Skriv ut lite text pรฅ konsolen.
- Ta bort elementet รถverst i stapeln. Det kommer sedan att returnera de element som finns kvar i stacken.
- Anropa createStack-funktionen fรถr att utfรถra ovanstรฅende operationer.
- Programmet mรฅste returnera vรคrde efter framgรฅngsrikt slutfรถrande.
- Slutet pรฅ huvuddelen av funktion main().
emplace() och swap()
Det hรคr รคr andra inbyggda stackfunktioner:
- placera()โ konstruerar och infogar sedan ett nytt element hรถgst upp i stacken.
- byta()โ byter stackinnehรฅll med en annan stacks innehรฅll.
Exempel 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(); } }
Produktion:
Hรคr รคr en skรคrmdump av koden:
Code Fรถrklaring:
- Inkludera iostream-huvudfilen i vรฅr kod fรถr att anvรคnda dess funktioner.
- Inkludera stackhuvudfilen i vรฅr kod fรถr att anvรคnda dess funktioner.
- Inkludera cstdlib-huvudfilen i vรฅr kod fรถr att anvรคnda dess funktioner.
- Inkludera std-namnomrรฅdet i vรฅr kod fรถr att anvรคnda dess klasser utan att anropa det.
- Anropa main()-funktionen. Programlogiken kommer att lรคggas till i kroppen av denna funktion.
- Deklarera en stack med namnet st1 fรถr att lagra heltalsvรคrden.
- Deklarera en stack med namnet st2 fรถr att lagra heltalsvรคrden.
- Anvรคnd funktionen emplace() fรถr att infoga heltal 12 i stacken som heter st1.
- Anvรคnd funktionen emplace() fรถr att infoga heltal 19 i stacken som heter st1.
- Anvรคnd funktionen emplace() fรถr att infoga heltal 20 i stacken som heter st2.
- Anvรคnd funktionen emplace() fรถr att infoga heltal 23 i stacken som heter st2.
- Anvรคnd swap()-funktionen fรถr att byta innehรฅllet i de tvรฅ stackarna, st1 och st2. Innehรฅllet i stack st1 ska flyttas till stack st2. Innehรฅllet i stack st2 ska flyttas till stack st1.
- Skriv ut lite text pรฅ konsolen.
- Anvรคnd while-satsen och funktionen empty() fรถr att kontrollera om stacken st1 inte รคr tom.
- Skriv ut innehรฅllet i stack st1 pรฅ konsolen. โ โ lรคgger till utrymme mellan stapelelementen nรคr du skriver ut dem pรฅ konsolen.
- Kรถr pop()-funktionen pรฅ stacken st1 fรถr att ta bort det รถversta elementet.
- Slutet pรฅ stundens brรถdtext.
- Skriv ut lite text pรฅ konsolen. รnden รคr en C++ nyckelord fรถr slutrad. Den flyttar muspekaren till nรคsta rad fรถr att bรถrja skriva ut dรคrifrรฅn.
- Anvรคnd while-satsen och funktionen empty() fรถr att kontrollera om stacken st2 inte รคr tom.
- Skriv ut innehรฅllet i stack st2 pรฅ konsolen. โ โ lรคgger till utrymme mellan stapelelementen nรคr du skriver ut dem pรฅ konsolen.
- Kรถr pop()-funktionen pรฅ stacken st2 fรถr att ta bort det รถversta elementet.
- Slutet pรฅ stundens brรถdtext.
- Slutet pรฅ huvuddelen av funktionen main().
Stapla i STL
STL (Standard Template Library) kommer med mallklasser som ger gemensamma C++ datastrukturer. Dรคrfรถr kan en stack ocksรฅ implementeras i STL. Vi inkluderar helt enkelt detta bibliotek i vรฅr kod och anvรคnder det fรถr att definiera en stack.
stack<T> st;
Ovanstรฅende syntax deklarerar en stack st till element av datatyp T.
Exempel 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(); }
Produktion:
Hรคr รคr en skรคrmdump av koden:
Code Fรถrklaring:
- Inkludera iostream-huvudfilen i vรฅr kod fรถr att anvรคnda dess funktioner.
- Inkludera stackhuvudfilen i vรฅr kod fรถr att anvรคnda dess funktioner.
- Inkludera cstdlib-huvudfilen i vรฅr kod fรถr att anvรคnda dess funktioner.
- Inkludera std-namnomrรฅdet i vรฅr kod fรถr att anvรคnda dess klasser utan att anropa det.
- Anropa main()-funktionen. Programlogiken bรถr lรคggas till i kroppen av denna funktion.
- Deklarera en stack st fรถr att lagra heltalsdata.
- Lรคgg till elementet 12 i stapeln.
- Lรคgg till elementet 19 i stapeln.
- Lรคgg till elementet 20 i stapeln.
- Skriv ut elementet รถverst i stapeln pรฅ konsolen.
- Skriv ut stapelns storlek pรฅ konsolen.
- Slutet pรฅ kroppen av funktionen main().






