Stable inn C++ STL med Eksempel
โก Smart oppsummering
Stable inn C++ STL implementerer en LIFO-containeradapter som legger til og fjerner elementer fra en enkelt ende, innpakningping en underliggende sekvensbeholder som deque, vektor eller liste for รฅ administrere ordnede data.

Hva er std::stack?
En stack er en datastruktur som opererer basert pรฅ LIFO (Last In First Out) teknikk. Std::-stakken lar elementer legges til og fjernes kun fra den ene enden.
std::stack-klassen er en containeradapter. Containerobjekter inneholder data av en lignende datatype. Du kan opprette en stakk fra forskjellige sekvenscontainere. Hvis ingen container er oppgitt, vil deque-containeren brukes som standard. Containeradaptere stรธtter ikke iteratorer, sรฅ de kan ikke brukes til รฅ manipulere data.
Stabelsyntaks
For รฅ lage en stabel mรฅ vi inkludere header-fil i koden vรฅr. Vi bruker deretter denne syntaksen til รฅ definere std::stack:
template <class Type, class Container = deque<Type> > class stack;
- typen โ er typen element som finnes i std::-stakken. Den kan vรฆre hvilken som helst gyldig C++ type eller til og med en brukerdefinert type.
- Container โ er typen underliggende beholderobjekt.
Medlemstyper
Her er stabelmedlemstyper:
- verditypeโ Den fรธrste malparameteren, T. Den angir elementtypene.
- beholdertypeโ Den andre malparameteren, Container. Den angir den underliggende containertypen.
- stรธrrelsestypeโ Usignert integraltype.
Operasjoner i Stack
A C++ stack stรธtter fรธlgende grunnleggende operasjoner:
- skyv โ Den legger til/skyver et element i stabelen.
- pop โ Den fjerner/popper opp et element fra stabelen.
- titt โ Returnerer det รธverste elementet i stabelen uten รฅ fjerne det.
- er Full โ Sjekker om en stabel er full.
- er tom โ Sjekker om en stabel er tom.
Stackimplementering
Fรธlgende trinn viser hvordan toppen av stabelen forskyves nรฅr elementer skyves og deretter poppes:
Trinn 1) Vi har i utgangspunktet en tom stabel. Toppen av en tom stabel settes til -1.
Trinn 2) Deretter har vi dyttet element 5 inn i stakken. Toppen av stakken vil peke mot element 5.
Trinn 3) Deretter har vi dyttet element 50 inn i stakken. Toppen av stakken forskyves og peker mot element 50.
Trinn 4) Vi har deretter utfรธrt en pop-operasjon, der vi fjerner det รธverste elementet fra stakken. Element 50 poppes ut av stakken. Toppen av stakken peker nรฅ mot element 5.
push() og pop()
Funksjonen stack::push() legger til et nytt element รธverst i stakken. Stรธrrelsen pรฅ stakken รธkes med 1 etter innsettingen. Funksjonen bruker denne syntaksen:
stack.push(value)
Verdien er elementet som skal settes inn i stabelen.
Funksjonen stack::pop() fjerner det รธverste elementet i stakken. Dette er det nyeste elementet i stakken. Stรธrrelsen pรฅ stakken reduseres med 1 etter fjerningen. Her er funksjonens syntaks:
stack.pop()
Funksjonen tar ingen parametere.
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(); } }
Utgang:
Her er et skjermbilde av koden:
Code Forklaring:
- Inkluder iostream-headerfilen i koden vรฅr for รฅ bruke funksjonene.
- Inkluder stabelhodefilen i koden vรฅr for รฅ bruke funksjonene.
- Inkluder std-navneomrรฅdet i koden vรฅr for รฅ bruke klassene uten รฅ kalle det.
- Kalle hoved()-funksjonen. Programlogikken bรธr legges til i denne funksjonen.
- Lag en stabel for รฅ lagre heltallsverdier.
- Bruk push()-funksjonen for รฅ sette inn verdien 10 i stabelen.
- Bruk push()-funksjonen for รฅ sette inn verdien 20 i stabelen.
- Bruk push()-funksjonen for รฅ sette inn verdien 30 i stabelen.
- Bruk push()-funksjonen for รฅ sette inn verdien 40 i stabelen.
- Bruk pop()-funksjonen for รฅ fjerne toppelementet fra stabelen, det vil si 40. Toppelementet blir nรฅ 30.
- Bruk pop()-funksjonen for รฅ fjerne toppelementet fra stabelen, det vil si 30. Toppelementet blir nรฅ 20.
- Bruk en while loop og empty() funksjon for รฅ sjekke om stabelen IKKE er tom. Den ! er NOT-operatรธren.
- Skriver ut gjeldende innhold i stabelen pรฅ konsollen.
- Kall opp pop()-funksjonen pรฅ stabelen.
- Slutten av kroppen av while-lรธkken.
- Slutten av hoved()-funksjonens hoveddel.
tomme(), stรธrrelse(), topp()
Stabler har innebygde funksjoner som du kan bruke til รฅ leke med stabelen og dens verdier. Disse inkluderer:
- tรธmme()โ sjekker om en stabel er tom eller ikke.
- stรธrrelse()โ returnerer stรธrrelsen pรฅ stakken, det vil si antall elementer i en stabel.
- topp()โ รฅpner stakkelementet รธ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; }
Utgang:
Her er et skjermbilde av koden:
Code Forklaring:
- Inkluder iostream-headerfilen i koden vรฅr for รฅ bruke funksjonene.
- Inkluder stabelhodefilen i koden vรฅr for รฅ bruke funksjonene.
- Inkluder std-navneomrรฅdet i programmet vรฅrt for รฅ bruke klassene uten รฅ kalle det.
- Lag funksjonen createStack som vi kan bruke til รฅ lage stack mystack. Stabelen vil inneholde et sett med heltall.
- Begynnelsen av kroppen til createStack-funksjonen.
- Opprett en forekomst av mystack-datatypen og gi den navnet ms.
- Bruk while-lรธkken og empty()-funksjonen for รฅ sjekke om stabelen er tom.
- Starten pรฅ kroppen til while-lรธkken.
- Bruk top()-funksjonen som er lagret pรฅ toppen av stabelen. Tegnet \t vil lage en ny fane.
- Bruk pop()-funksjonen for รฅ slette elementet รธverst i stabelen.
- Slutten av kroppen av while-lรธkken.
- Skriv ut en tom linje pรฅ konsollen.
- Slutten av brรธdteksten til createStack-funksjonen.
- Kalle hoved()-funksjonen. Programlogikken skal legges til i hoveddelen av hoved()-funksjonen.
- Starten pรฅ hoveddelen av funksjonen main().
- Lag et stabelobjekt st.
- Bruk push()-funksjonen for รฅ sette inn elementet 32 โโi stabelen.
- Bruk push()-funksjonen for รฅ sette inn elementet 21 โโi stabelen.
- Bruk push()-funksjonen for รฅ sette inn elementet 39 โโi stabelen.
- Bruk push()-funksjonen for รฅ sette inn elementet 89 โโi stabelen.
- Bruk push()-funksjonen for รฅ sette inn elementet 25 โโi stabelen.
- Skriv ut litt tekst pรฅ konsollen.
- Kall createStack-funksjonen for รฅ utfรธre innsettingsoperasjonene ovenfor i stabelen.
- Skriv ut stรธrrelsen pรฅ stabelen pรฅ konsollen sammen med annen tekst.
- Skriv ut elementet pรฅ toppen av stabelen pรฅ konsollen.
- Skriv ut litt tekst pรฅ konsollen.
- Slett elementet pรฅ toppen av stabelen. Den vil da returnere elementene som er igjen i stabelen.
- Kall createStack-funksjonen for รฅ utfรธre operasjonene ovenfor.
- Programmet mรฅ returnere verdi ved vellykket gjennomfรธring.
- Slutten av hoveddelen av funksjonen main().
emplace() og swap()
Dette er andre innebygde stabelfunksjoner:
- plassere()โ konstruerer og setter deretter inn et nytt element รธverst i stakken.
- bytte()โ utveksler stabelinnhold med innholdet i en annen stabel.
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(); } }
Utgang:
Her er et skjermbilde av koden:
Code Forklaring:
- Inkluder iostream-headerfilen i koden vรฅr for รฅ bruke funksjonene.
- Inkluder stabelhodefilen i koden vรฅr for รฅ bruke funksjonene.
- Inkluder cstdlib-headerfilen i koden vรฅr for รฅ bruke funksjonene.
- Inkluder std-navneomrรฅdet i koden vรฅr for รฅ bruke klassene uten รฅ kalle det.
- Kalle hoved()-funksjonen. Programlogikken vil bli lagt til i hoveddelen av denne funksjonen.
- Deklarer en stabel som heter st1 for รฅ lagre heltallsverdier.
- Deklarer en stabel som heter st2 for รฅ lagre heltallsverdier.
- Bruk emplace()-funksjonen til รฅ sette inn hele tallet 12 i stabelen som heter st1.
- Bruk emplace()-funksjonen til รฅ sette inn hele tallet 19 i stabelen som heter st1.
- Bruk emplace()-funksjonen til รฅ sette inn hele tallet 20 i stabelen som heter st2.
- Bruk emplace()-funksjonen til รฅ sette inn hele tallet 23 i stabelen som heter st2.
- Bruk swap()-funksjonen til รฅ bytte innholdet i de to stablene, st1 og st2. Innholdet i stabelen st1 skal flyttes til stabelen st2. Innholdet i stabelen st2 skal flyttes til stabelen st1.
- Skriv ut litt tekst pรฅ konsollen.
- Bruk while-setningen og funksjonen empty() for รฅ sjekke om stabelen st1 ikke er tom.
- Skriv ut innholdet i stabelen st1 pรฅ konsollen. " " legger til mellomrom mellom stabelelementene nรฅr de skrives ut pรฅ konsollen.
- Utfรธr pop()-funksjonen pรฅ stabelen st1 for รฅ fjerne toppelementet.
- Slutten av brรธdteksten til while-utsagnet.
- Skriv ut litt tekst pรฅ konsollen. Endl er en C++ nรธkkelord for sluttlinje. Den flytter musepekeren til neste linje for รฅ begynne utskriften derfra.
- Bruk while-setningen og funksjonen empty() for รฅ sjekke om stabelen st2 ikke er tom.
- Skriv ut innholdet i stabelen st2 pรฅ konsollen. " " legger til mellomrom mellom stabelelementene nรฅr de skrives ut pรฅ konsollen.
- Utfรธr pop()-funksjonen pรฅ stabelen st2 for รฅ fjerne toppelementet.
- Slutten av brรธdteksten til while-utsagnet.
- Slutten av hoveddelen av hoved()-funksjonen.
Stable i STL
STL (Standard Template Library) kommer med malklasser som gir felles C++ datastrukturer. Derfor kan en stack ogsรฅ implementeres i STL. Vi inkluderer ganske enkelt dette biblioteket i koden vรฅr og bruker det til รฅ definere en stabel.
stack<T> st;
Syntaksen ovenfor erklรฆrer en stack st til elementer av 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(); }
Utgang:
Her er et skjermbilde av koden:
Code Forklaring:
- Inkluder iostream-headerfilen i koden vรฅr for รฅ bruke funksjonene.
- Inkluder stabelhodefilen i koden vรฅr for รฅ bruke funksjonene.
- Inkluder cstdlib-headerfilen i koden vรฅr for รฅ bruke funksjonene.
- Inkluder std-navneomrรฅdet i koden vรฅr for รฅ bruke klassene uten รฅ kalle det.
- Kalle hoved()-funksjonen. Programlogikken skal legges til i hoveddelen av denne funksjonen.
- Deklarer en stabelst for รฅ lagre heltallsdata.
- Legg elementet 12 til stabelen.
- Legg elementet 19 til stabelen.
- Legg elementet 20 til stabelen.
- Skriv ut elementet pรฅ toppen av stabelen pรฅ konsollen.
- Skriv ut stรธrrelsen pรฅ stabelen pรฅ konsollen.
- Slutten av brรธdteksten til funksjonen main().






