Skladanie v C ++ STL s príkladom

Obsah:

Anonim

Čo je std :: stack?

Zásobník je dátová štruktúra, ktorá funguje na základe techniky LIFO (Last In First Out). Std :: stack umožňuje pridávanie a odstraňovanie prvkov iba na jednom konci.

Trieda std :: stack je kontajnerový adaptér. Kontajnerové objekty obsahujú údaje podobného dátového typu. Stoh môžete vytvoriť z rôznych kontajnerov sekvencií. Ak nie je uvedený žiadny kontajner, predvolene sa použije deque containe. Kontajnerové adaptéry nepodporujú iterátory, takže ho nemožno použiť na manipuláciu s údajmi.

V tomto výučbe pre C ++ sa naučíte

  • Čo je std :: stack?
  • Syntax zásobníka
  • Typy členov
  • Operácie v zásobníku
  • Stack Implementácia
  • push () a pop ()
  • prázdne (), veľkosť (), horné ()
  • emplace () a swap ()
  • Sklad v STL

Syntax zásobníka

Aby sme vytvorili stoh, musíme do nášho kódu zahrnúť hlavičkový súbor . Túto syntax potom použijeme na definovanie std :: stack:

template  > class stack;
  • Typ - je typ prvku obsiahnutého v std :: stack. Môže to byť akýkoľvek platný typ C ++ alebo dokonca používateľom definovaný typ.
  • Kontajner - je typ základného objektu kontajnera.

Typy členov

Tu sú typy členov zásobníka:

  • value_type- prvý parameter šablóny, T. Označuje typy prvkov.
  • container_type- Druhý parameter šablóny, Kontajner. Označuje podkladový typ kontajnera.
  • size_type- nepodpísaný integrálny typ.

Operácie v zásobníku

Zásobník C ++ podporuje nasledujúce základné operácie:

  • push - pridáva / tlačí položku do stohu.
  • pop - Odstráni / vysunie položku zo zásobníka.
  • peek - Vráti hornú položku zásobníka bez jej odstránenia.
  • isFull - Skontroluje, či je zásobník plný.
  • isEmpty - Skontroluje, či je zásobník prázdny.

Stack Implementácia

Krok 1) Spočiatku máme prázdny zásobník. Horná časť prázdneho stohu je nastavená na -1.

Krok 2) Ďalej sme prvok 5 natlačili do stohu. Horná časť stohu bude smerovať k prvku 5.

Krok 3) Ďalej sme prvok 50 vtlačili do stohu. Horná časť stohu sa posúva a ukazuje na prvok 50.

Krok 4) Potom sme vykonali popovú operáciu odstránením horného prvku zo zásobníka. Element 50 je vysunutý zo stohu. Horná časť stohu teraz smeruje k prvku 5.

push () a pop ()

Funkcie stack :: push () pridávajú novú položku do hornej časti zásobníka. Po vložení sa veľkosť stohu zvýši o 1. Funkcia má túto syntax:

stack.push(value)

Hodnota je položka, ktorá sa má vložiť do stohu.

Funkcia stack :: pop () odstráni horný prvok zásobníka. Toto je najnovšia položka v zásobníku. Po odstránení sa veľkosť stohu zmenší o 1. Tu je syntax funkcie:

stack.pop()

Funkcia nemá žiadne parametre.

Príklad 1:

#include #include using namespace std;int main() {stack 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();}}

Výkon:

Tu je snímka obrazovky s kódom:

Vysvetlenie kódu:

  1. Zahrňte súbor hlavičky iostream do nášho kódu, aby ste mohli využívať jeho funkcie.
  2. Zahrňte súbor hlavičky zásobníka do nášho kódu, aby ste mohli využívať jeho funkcie.
  3. Ak chcete používať svoje triedy bez toho, aby ste ich volali, zahrňte do nášho kódu std namespace.
  4. Zavolajte funkciu main (). Do tejto funkcie by sa mala pridať programová logika.
  5. Vytvorte stoh zásobníka na ukladanie celočíselných hodnôt.
  6. Pomocou funkcie push () vložte hodnotu 10 do stohu.
  7. Pomocou funkcie push () vložte hodnotu 20 do stohu.
  8. Pomocou funkcie push () vložte hodnotu 30 do stohu.
  9. Pomocou funkcie push () vložte hodnotu 40 do zásobníka.
  10. Pomocou funkcie pop () odstráňte horný prvok zo zásobníka, to znamená 40. Z horného prvku sa teraz stáva 30.
  11. Pomocou funkcie pop () odstráňte horný prvok zo zásobníka, to znamená 30. Z horného prvku sa teraz stáva 20.
  12. Pomocou funkcie while a empty () skontrolujte, či zásobník NIE je prázdny. The! nie je operátorom.
  13. Tlač aktuálneho obsahu stohu na konzole.
  14. Zavolajte funkciu pop () na zásobníku.
  15. Koniec tela slučky while.
  16. Koniec hlavného () funkčného tela.

prázdne (), veľkosť (), horné ()

Stohy majú zabudované funkcie, ktoré môžete použiť na hranie sa so zásobníkom a jeho hodnotami. Tie obsahujú:

  • empty () - skontroluje, či je zásobník prázdny alebo nie.
  • size () - vráti veľkosť stohu, to znamená počet prvkov v stohu.
  • top () - prístup k prvku zásobníka v hornej časti.

Príklad 2:

#include #include using namespace std;void createStack(stack  mystack){stack  ms = mystack;while (!ms.empty()){cout << '\t' << ms.top();ms.pop();}cout << '\n';}int main(){stack  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;}

Výkon:

Tu je snímka obrazovky s kódom:

Vysvetlenie kódu:

  1. Zahrňte hlavičkový súbor iostream do nášho kódu, aby ste mohli využívať jeho funkcie.
  2. Zahrňte súbor hlavičky zásobníka do nášho kódu, aby ste mohli využívať jeho funkcie.
  3. Zahrňte štandardný priestor mien do nášho programu, aby ste mohli používať jeho triedy bez jeho volania.
  4. Vytvorte funkciu createStack, ktorú môžeme použiť na vytvorenie zásobníka mystack. Na hromádke sa bude nachádzať množina celých čísel.
  5. Začiatok tela funkcie createStack.
  6. Vytvorte inštanciu dátového typu mystack a pomenujte ju ms.
  7. Pomocou slučky while a funkcie empty () skontrolujte, či je zásobník prázdny.
  8. Začiatok tela slučky while.
  9. Použite funkciu top () uloženú v hornej časti stohu. Znak \ t vytvorí novú kartu.
  10. Pomocou funkcie pop () odstráňte prvok v hornej časti zásobníka.
  11. Koniec tela slučky while.
  12. Na konzole vytlačte prázdny riadok.
  13. Koniec tela funkcie createStack.
  14. Zavolajte funkciu main (). Logika programu by mala byť pridaná do tela funkcie main ().
  15. Začiatok tela funkcie main ().
  16. Vytvorte stohový objekt sv.
  17. Pomocou funkcie push () vložte prvok 32 do stohu.
  18. Pomocou funkcie push () vložte prvok 21 do stohu.
  19. Pomocou funkcie push () vložte prvok 39 do stohu.
  20. Pomocou funkcie push () vložte prvok 89 do stohu.
  21. Pomocou funkcie push () vložte prvok 25 do stohu.
  22. Vytlačte nejaký text na konzolu.
  23. Zavolajte funkciu createStack na vykonanie vyššie uvedených operácií vloženia do zásobníka.
  24. Vytlačte veľkosť stohu na konzole spolu s ďalším textom.
  25. Vytlačte prvok v hornej časti stohu na konzole.
  26. Vytlačte nejaký text na konzolu.
  27. Odstráňte prvok v hornej časti stohu. Potom vráti prvky zostávajúce v zásobníku.
  28. Na vykonanie vyššie uvedených operácií zavolajte funkciu createStack.
  29. Po úspešnom dokončení musí program vrátiť hodnotu.
  30. Koniec tela funkcie main ().

emplace () a swap ()

Toto sú ďalšie zabudované funkcie zásobníka:

  • emplace () - konštrukty potom vložia nový prvok do hornej časti zásobníka.
  • swap () - vymení obsah zásobníka za obsah iného zásobníka.

Príklad 3:

#include #include #include using namespace std;int main() {stack st1;stack 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();}}

Výkon:

Tu je snímka obrazovky s kódom:

Vysvetlenie kódu:

  1. Zahrňte súbor hlavičky iostream do nášho kódu, aby ste mohli využívať jeho funkcie.
  2. Zahrňte súbor hlavičky zásobníka do nášho kódu, aby ste mohli využívať jeho funkcie.
  3. Zahrňte súbor hlavičky cstdlib do nášho kódu, aby ste mohli využívať jeho funkcie.
  4. Ak chcete používať svoje triedy bez toho, aby ste ich volali, zahrňte do nášho kódu std namespace.
  5. Zavolajte funkciu main (). Logika programu bude pridaná do tela tejto funkcie.
  6. Deklarujte zásobník s názvom st1 na ukladanie celočíselných hodnôt.
  7. Deklarujte zásobník s názvom st2 na ukladanie celočíselných hodnôt.
  8. Pomocou funkcie emplace () vložte celé číslo 12 do zásobníka s názvom st1.
  9. Pomocou funkcie emplace () vložte celé číslo 19 do zásobníka s názvom st1.
  10. Pomocou funkcie emplace () vložte celé číslo 20 do zásobníka s názvom st2.
  11. Pomocou funkcie emplace () vložte celé číslo 23 do zásobníka s názvom st2.
  12. Pomocou funkcie swap () môžete zameniť obsah dvoch stohov, st1 a st2. Obsah stohu st1 by sa mal presunúť do stohu st2. Obsah stohu st2 by sa mal presunúť do stohu st1.
  13. Vytlačte nejaký text na konzolu.
  14. Pomocou príkazu while a funkcie empty () skontrolujte, či zásobník st1 nie je prázdny.
  15. Vytlačte obsah stohu st1 na konzolu. Symbol „“ pridáva priestor medzi prvkami stohu pri ich tlači na konzole.
  16. Vykonajte funkciu pop () na zásobníku st1, aby ste odstránili horný prvok.
  17. Koniec textu vyhlásenia while.
  18. Vytlačte nejaký text na konzolu. Endl je kľúčové slovo C ++ pre koncový riadok. Presunie kurzor myši na ďalší riadok a odtiaľ začne tlačiť.
  19. Pomocou príkazu while a funkcie empty () skontrolujte, či zásobník st2 nie je prázdny.
  20. Vytlačte obsah stohu st2 na konzolu. Symbol „“ pridáva priestor medzi prvkami stohu pri ich tlači na konzole.
  21. Vykonajte funkciu pop () na zásobníku st2, aby ste odstránili horný prvok.
  22. Koniec textu vyhlásenia while.
  23. Koniec tela hlavnej () funkcie.

Sklad v STL

STL (Standard Template Library) je dodávaný s triedami šablón, ktoré poskytujú bežné dátové štruktúry C ++. Preto môže byť zásobník implementovaný aj v STL. Túto knižnicu jednoducho zahrnieme do nášho kódu a použijeme ju na definovanie zásobníka.

stack st;

Vyššie uvedená syntax deklaruje zásobník st na prvky dátového typu T.

Príklad 3:

#include #include #include using namespace std;int main() {stack st;st.push(12);st.push(19);st.push(20);cout << st.top();cout << st.size();}

Výkon:

Tu je snímka obrazovky s kódom:

Vysvetlenie kódu:

  1. Zahrňte súbor hlavičky iostream do nášho kódu, aby ste mohli využívať jeho funkcie.
  2. Zahrňte súbor hlavičky zásobníka do nášho kódu, aby ste mohli využívať jeho funkcie.
  3. Zahrňte súbor hlavičky cstdlib do nášho kódu, aby ste mohli využívať jeho funkcie.
  4. Ak chcete používať svoje triedy bez toho, aby ste ich volali, zahrňte do nášho kódu std namespace.
  5. Zavolajte funkciu main (). Logika programu by mala byť pridaná do tela tejto funkcie.
  6. Deklarujte zásobník st na ukladanie celočíselných údajov.
  7. Pridajte prvok 12 do stohu.
  8. Pridajte prvok 19 do stohu.
  9. Pridajte prvok 20 do stohu.
  10. Vytlačte prvok v hornej časti stohu na konzole.
  11. Vytlačte veľkosť stohu na konzole.
  12. Koniec tela funkcie main ().

Zhrnutie:

  • Zásobník je dátová štruktúra, ktorá funguje na základe techniky LIFO (Last In First Out).
  • Std :: stack umožňuje pridávanie a odoberanie položiek iba na jednom konci.
  • Trieda std :: stack je kontajnerový adaptér, ktorý obsahuje položky podobného dátového typu.
  • Stoh je možné vytvoriť z rôznych kontajnerov sekvencií.
  • Ak neposkytnete kontajner, predvolene sa použije kontajner deque.
  • Funkcia push () slúži na vkladanie položiek do stohu.
  • Funkcia pop () slúži na odstránenie hornej položky z kroku.
  • Funkcia empty () slúži na kontrolu, či je zásobník prázdny alebo nie.