Stack C ++ STL koos näitega

Lang L: none (table-of-contents):

Anonim

Mis on std :: stack?

Virn on andmestruktuur, mis töötab LIFO (Last In First Out) tehnikal. Std :: stack võimaldab elemente lisada ja eemaldada ainult ühest otsast.

Klass std :: stack on konteineradapter. Konteinerobjektid sisaldavad sarnast tüüpi andmet. Virna saate luua erinevatest järjestuskonteineritest. Kui konteinerit pole, kasutatakse vaikimisi deque containe'i. Konteineriadapterid ei toeta iteraatoreid, seega ei saa seda kasutada andmetega manipuleerimiseks.

Selles C ++ õpetuses saate teada

  • Mis on std :: stack?
  • Virna süntaks
  • Liikmetüübid
  • Operatsioonid virnas
  • Virna rakendamine
  • push () ja pop ()
  • tühi (), suurus (), ülemine ()
  • emplace () ja swap ()
  • Virna STL-i

Virna süntaks

Virna loomiseks peame oma koodi lisama päisefaili . Seejärel kasutame seda süntaksit std :: stacki määratlemiseks:

template  > class stack;
  • Tüüp - on std :: stackis sisalduva elemendi tüüp. See võib olla mis tahes kehtiv C ++ tüüp või isegi kasutaja määratud tüüp.
  • Konteiner - on aluseks oleva konteineri objekti tüüp.

Liikmetüübid

Siin on virnaliikmete tüübid:

  • väärtus_tüüp - esimene malliparameeter T. See tähistab elemenditüüpe.
  • container_type - teine ​​malli parameeter Container. See tähistab aluseks olevat konteineri tüüpi.
  • size_type- allkirjastamata integraali tüüp.

Operatsioonid virnas

C ++ virn toetab järgmisi põhitoiminguid:

  • tõuge - see lisab / surub üksuse virna.
  • pop - see eemaldab / hüppab üksuse virnast.
  • peek - tagastab virna ülemise elemendi seda eemaldamata.
  • isFull - kontrollib, kas virn on täis.
  • isTühi - kontrollib, kas virn on tühi.

Virna rakendamine

1. samm) Meil on esialgu tühi virn. Tühja virna ülaosaks on seatud -1.

Samm 2) Järgmisena oleme elemendi 5 virna surunud. Virna ülaosa osutab elemendile 5.

Samm 3) Järgmisena oleme lükanud elemendi 50 virna. Virna ülaosa nihkub ja osutab elemendile 50.

Samm 4) Seejärel oleme teinud popoperatsiooni, eemaldades virna pealmise elemendi. Element 50 hüpatakse virnast välja. Virna ülaosa osutab nüüd elemendile 5.

push () ja pop ()

Funktsioonid Stack :: push () lisab virna ülaosale uue üksuse. Pärast sisestamist suurendatakse virna suurust 1 võrra. Funktsioon kasutab seda süntaksit:

stack.push(value)

Väärtus on üks virnasse sisestatav element.

Funktsioon Stack :: pop () eemaldab virna ülemise elemendi. See on virna uusim element. Virna suurust vähendatakse pärast eemaldamist 1 võrra. Siin on funktsiooni süntaks:

stack.pop()

Funktsioon ei võta parameetreid.

Näide 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äljund:

Siin on ekraanipilt koodist:

Koodi selgitus:

  1. Lisage iostreami päisefail meie koodi, et selle funktsioone kasutada.
  2. Kaasige virna päisefail meie koodi, et selle funktsioone kasutada.
  3. Kaasake standardnimeruum meie koodi, et kasutada selle klasse ilma seda kutsumata.
  4. Helistage funktsioonile main (). Selle funktsiooni sisse tuleks lisada programmiloogika.
  5. Loo täisarvu salvestamiseks virnasilm.
  6. Väärtuse 10 virna sisestamiseks kasutage funktsiooni push ().
  7. Väärtuse 20 virna sisestamiseks kasutage funktsiooni push ().
  8. Väärtuse 30 virna sisestamiseks kasutage funktsiooni push ().
  9. Väärtuse 40 virna sisestamiseks kasutage funktsiooni push ().
  10. Funktsiooni pop () abil eemaldage virnast ülemine element, see tähendab 40. Ülemine element muutub nüüd 30-ks.
  11. Funktsiooni pop () abil eemaldage virnast ülemine element, see tähendab 30. Ülemine element saab nüüd 20.
  12. Kasutage funktsiooni while loop ja empty (), et kontrollida, kas virn EI ole tühi. The! on EI operaator.
  13. Virna praeguse sisu printimine konsoolile.
  14. Kutsuge virna funktsiooni pop ().
  15. Aju silmuse keha lõpp.
  16. Põhifunktsiooni () keha lõpp.

tühi (), suurus (), ülemine ()

Virnadel on sisseehitatud funktsioonid, mida saate kasutada virna ja selle väärtustega ringi mängimiseks. Need sisaldavad:

  • tühi () - kontrollib, kas virn on tühi või mitte.
  • size () - tagastab virna suuruse, st virnas olevate elementide arvu.
  • top () - pääseb virnaelementi ülevalt.

Näide 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äljund:

Siin on ekraanipilt koodist:

Koodi selgitus:

  1. Kaasake iostreami päisefail meie koodi, et selle funktsioone kasutada.
  2. Lisage virna päisefail meie koodi, et selle funktsioone kasutada.
  3. Kaasake standardne nimeruum meie programmi, et kasutada selle klasse ilma seda kutsumata.
  4. Looge funktsioon createStack, mille abil saame luua virna mistacki. Virna mahutab täisarvude komplekti.
  5. Funktsiooni createStack keha algus.
  6. Looge mystacki andmetüübi eksemplar ja andke sellele nimi ms.
  7. Kasutage funktsiooni while ja tühja () funktsiooni, et kontrollida, kas virna on tühi.
  8. While-silmuse keha algus.
  9. Kasutage virna ülaossa salvestatud funktsiooni top (). Märk \ t loob uue vahelehe.
  10. Funktsiooni pop () abil saate virna ülaosas oleva elemendi kustutada.
  11. Aju silmuse keha lõpp.
  12. Printige konsoolile tühi rida.
  13. Funktsiooni createStack keha lõpp.
  14. Helistage funktsioonile main (). Programmiloogika tuleks lisada peamise () funktsiooni kehasse.
  15. Funktsioonikeha algus main ().
  16. Loo korstnaobjekt st.
  17. Kasutage funktsiooni push (), et sisestada element 32 virna.
  18. Elemendi 21 virna sisestamiseks kasutage funktsiooni push ().
  19. Elemendi 39 virna sisestamiseks kasutage funktsiooni push ().
  20. Elemendi 89 virna sisestamiseks kasutage funktsiooni push ().
  21. Elemendi 25 virna sisestamiseks kasutage funktsiooni push ().
  22. Printige konsoolile tekst.
  23. Kõnealuste ülaltoodud sisestamistoimingute sooritamiseks kutsuge funktsiooni createStack.
  24. Printige virna suurus konsoolile muu teksti kõrvale.
  25. Printige element konsooli virna ülaossa.
  26. Printige konsoolile tekst.
  27. Kustutage virna ülaosas olev element. Seejärel tagastab korstnasse jäänud elemendid.
  28. Eeltoodud toimingute käivitamiseks helistage funktsiooni createStack.
  29. Eduka lõpetamise korral peab programm tagastama väärtuse.
  30. Funktsiooni põhiosa lõpp ().

emplace () ja swap ()

Need on muud sisseehitatud virnafunktsioonid:

  • emplace () - konstrueerib seejärel uue elemendi virna ülaossa.
  • swap () - vahetab virna sisu teise virna sisuga.

Näide 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äljund:

Siin on ekraanipilt koodist:

Koodi selgitus:

  1. Lisage iostreami päisefail meie koodi, et selle funktsioone kasutada.
  2. Kaasige virna päisefail meie koodi, et selle funktsioone kasutada.
  3. Selle funktsioonide kasutamiseks lisage meie koodile ka päisefail cstdlib.
  4. Kaasake standardnimeruum meie koodi, et kasutada selle klasse ilma seda kutsumata.
  5. Helistage funktsioonile main (). Programmi loogika lisatakse selle funktsiooni kehasse.
  6. Deklareerige täisarvude salvestamiseks virn nimega st1.
  7. Deklareerige täisarvu salvestamiseks virn nimega st2.
  8. Funktsiooni emplace () abil sisestage täisarv 12 virna nimega st1.
  9. Funktsiooni emplace () abil sisestage täisarv 19 virna nimega st1.
  10. Funktsiooni emplace () abil sisestage täisarv 20 virna nimega st2.
  11. Funktsiooni emplace () abil sisestage täisarv 23 virna nimega st2.
  12. Funktsiooni swap () abil saate vahetada kahe virna, st1 ja st2 sisu. Virna st1 sisu tuleks viia virna st2. Virna st2 sisu tuleks viia virna st1.
  13. Printige konsoolile tekst.
  14. Funktsiooni while ja tühja () abil saate kontrollida, kas virn st1 pole tühi.
  15. Trükkige virna st1 sisu konsoolile. Konsoolile printimisel lisab "" virnaelementide vahele ruumi.
  16. Ülemise elemendi eemaldamiseks käivitage virna st1 funktsioon pop ().
  17. Ajalause lause lõpp.
  18. Printige konsoolile tekst. Endl on lõpurea C ++ märksõna. See viib hiire kursori järgmisele reale, et sealt printimist alustada.
  19. Funktsiooni while ja tühja () abil saate kontrollida, kas virn st2 pole tühi.
  20. Trükkige virna st2 sisu konsoolile. "" Lisab virnaelementide vahele ruumi konsoolile printimisel.
  21. Ülemise elemendi eemaldamiseks käivitage virna st2 funktsioon pop ().
  22. Ajalause lause lõpp.
  23. Põhifunktsiooni () keha lõpp.

Virna STL-i

STL (Standard Template Library) on varustatud malliklassidega, mis pakuvad ühiseid C ++ andmestruktuure. Seetõttu saab STL-is rakendada ka virna. Lisame selle teegi lihtsalt oma koodi ja kasutame seda virna määratlemiseks.

stack st;

Ülaltoodud süntaks deklareerib virna st andmetüübi T elementidele.

Näide 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äljund:

Siin on ekraanipilt koodist:

Koodi selgitus:

  1. Lisage iostreami päisefail meie koodi, et selle funktsioone kasutada.
  2. Kaasige virna päisefail meie koodi, et selle funktsioone kasutada.
  3. Selle funktsioonide kasutamiseks lisage meie koodile ka päisefail cstdlib.
  4. Kaasake standardnimeruum meie koodi, et kasutada selle klasse ilma seda kutsumata.
  5. Helistage funktsioonile main (). Selle funktsiooni kehasse tuleks lisada programmiloogika.
  6. Deklareerige täisarvu salvestamiseks virnasilm.
  7. Lisage virnale element 12.
  8. Lisage virnale element 19.
  9. Lisage virnale element 20.
  10. Printige element konsooli virna ülaossa.
  11. Trükkige virna suurus konsoolile.
  12. Funktsiooni main () peaosa lõpp.

Kokkuvõte:

  • Virn on andmestruktuur, mis töötab LIFO (Last In first Out) tehnikal.
  • Std :: stack võimaldab üksusi ainult ühest otsast lisada ja eemaldada.
  • Klass std :: stack on konteineradapter, mis hoiab sarnase andmetüübiga üksusi.
  • Virna saab luua erinevatest järjestuskonteineritest.
  • Kui te ei paku konteinerit, kasutatakse vaikimisi deque konteinerit.
  • Funktsioon Push () on mõeldud üksuste virna sisestamiseks.
  • Funktsioon pop () on mõeldud ülemise elemendi eemaldamiseks sammust.
  • Funktsioon tühi () kontrollib, kas virna on tühi või mitte.