Verem a C ++ STL-be példával

Tartalomjegyzék:

Anonim

Mi az std :: stack?

A verem egy olyan adatstruktúra, amely a LIFO (Last In First Out) technikán alapul. Az std :: stack lehetővé teszi az elemek hozzáadását és eltávolítását csak az egyik végéből.

Az std :: stack osztály egy tartályadapter. A konténerobjektumok hasonló adattípusú adatokat tárolnak. Verem létrehozható különféle sorrendtartályokból. Ha nincs megadva konténer, akkor alapértelmezés szerint a deque containe kerül felhasználásra. A konténeradapterek nem támogatják az iterátorokat, ezért nem használhatók adatok manipulálására.

Ebben a C ++ oktatóanyagban megtanulja

  • Mi az std :: stack?
  • Verem szintaxis
  • Tag típusok
  • Műveletek a veremben
  • Verem megvalósítása
  • push () és pop ()
  • üres (), méret (), felső ()
  • emplace () és swap ()
  • Verem az STL-be

Verem szintaxis

Verem létrehozásához a fejléc fájlt be kell építenünk a kódunkba. Ezután ezt a szintaxist használjuk az std :: stack meghatározásához:

template  > class stack;
  • Típus - az std :: verem elemének típusa. Lehet bármilyen érvényes C ++ típus vagy akár egy felhasználó által definiált típus.
  • Tároló - az alatta lévő tároló objektum típusa.

Tag típusok

Itt vannak a veremtagok típusai:

  • value_type- Az első T. sablonparaméter az elemtípusokat jelöli.
  • container_type - A második sablon paraméter, a Container. Jelöli az alapul szolgáló tárolótípust.
  • size_type- Aláíratlan integráltípus.

Műveletek a veremben

A C ++ verem a következő alapvető műveleteket támogatja:

  • push - Hozzáad / eldob egy elemet a verembe.
  • pop - Eltávolít / eldob egy elemet a veremből.
  • peek - Visszaadja a verem legfelső elemét anélkül, hogy eltávolítaná.
  • isFull - Ellenőrzi, hogy a verem megtelt-e.
  • isEmpty - Ellenőrzi, hogy a verem üres-e.

Verem megvalósítása

1. lépés: Kezdetben van egy üres verem. Az üres verem teteje -1-re van állítva.

2. lépés) Ezután betoltuk az 5. elemet a verembe. A verem teteje az 5. elemre mutat.

3. lépés) Ezután betoltuk az 50 elemet a verembe. A verem teteje elmozdul és az 50 elemre mutat.

4. lépés) Ezután végrehajtottunk egy pop műveletet, eltávolítva a felső elemet a veremből. Az 50 elem kiugrik a veremből. A verem teteje most az 5 elemre mutat.

push () és pop ()

A stack :: push () függvények új elemet adnak a verem tetejére. A verem mérete a behelyezés után 1-gyel nő. A függvény ezt a szintaxist veszi át:

stack.push(value)

Az érték az az elem, amelyet be kell illeszteni a verembe.

A stack :: pop () függvény eltávolítja a verem legfelső elemét. Ez a verem legújabb eleme. A verem mérete az eltávolítás után 1-gyel csökken. Itt van a függvény szintaxisa:

stack.pop()

A függvény nem vesz fel paramétereket.

1. példa:

#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();}}

Kimenet:

Itt van egy képernyőkép a kódról:

Kód Magyarázat:

  1. A funkcióinak használatához vegye fel az iostream fejlécfájlt kódunkba.
  2. Felvegye a verem fejléc fájlt a kódunkba, hogy használhassa a funkcióit.
  3. Vegye fel az std névteret a kódunkba, hogy az osztályait hívás nélkül használhassa.
  4. Hívja meg a main () függvényt. A program logikát hozzá kell adni ehhez a függvényhez.
  5. Hozzon létre egy verem st az egész értékek tárolásához.
  6. A push () függvény segítségével illessze be a 10 értéket a verembe.
  7. A push () függvény segítségével illessze be a 20 értéket a verembe.
  8. A push () függvény segítségével illessze be a 30 értéket a verembe.
  9. A push () függvény segítségével illessze be a 40 értéket a verembe.
  10. A pop () függvény segítségével távolítsa el a legfelső elemet a veremből, azaz 40-et. A felső elemből most 30 lesz.
  11. A pop () függvény segítségével távolítsa el a felső elemet a veremből, azaz 30-at. A felső elemből most 20 lesz.
  12. Használjon egy darab hurok és üres () függvényt, hogy ellenőrizze, hogy a verem NEM üres-e. A ! a NEM operátor.
  13. A verem aktuális tartalmának kinyomtatása a konzolra.
  14. Hívja meg a verem pop () függvényét.
  15. A while hurok testének vége.
  16. A fő () függvénytest vége.

üres (), méret (), felső ()

A veremeknek beépített funkciói vannak, amelyekkel a verem és annak értékei között játszhatsz. Ezek tartalmazzák:

  • empty () - ellenőrzi, hogy a verem üres-e vagy sem.
  • size () - a verem méretét adja vissza, vagyis a veremben lévő elemek számát.
  • top () - a tetején lévő verem elemhez fér hozzá.

2. példa:

#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;}

Kimenet:

Itt van egy képernyőkép a kódról:

Kód Magyarázat:

  1. A funkcióinak használata érdekében vegye fel az iostream fejléc fájlt a kódunkba.
  2. A verem fejlécfájljának beillesztése a kódunkba annak funkcióinak használata érdekében.
  3. Vegye fel az std névteret programunkba, hogy az osztályait hívás nélkül használhassa.
  4. Hozza létre a createStack függvényt, amellyel létrehozhatjuk a verem mystackjét. A verem egész számokat fog tartalmazni.
  5. A createStack függvény törzsének kezdete.
  6. Hozzon létre egy példát a mystack adattípusból, és adja meg neki az ms nevet.
  7. A while ciklus és az empty () függvény segítségével ellenőrizheti, hogy a verem üres-e.
  8. A while hurok testének kezdete.
  9. Használja a verem tetején tárolt top () függvényt. A \ t karakter új lapot hoz létre.
  10. A pop () függvény segítségével törölheti a verem tetején található elemet.
  11. A while hurok testének vége.
  12. Nyomtasson ki egy üres sort a konzolra.
  13. A createStack függvény törzsének vége.
  14. Hívja meg a main () függvényt. A programlogikát hozzá kell adni a main () függvény törzséhez.
  15. A funkciótest kezdete main ().
  16. Hozzon létre veremobjektumot st.
  17. A push () függvény segítségével illessze be a 32 elemet a verembe.
  18. A push () függvény segítségével illessze be a 21 elemet a verembe.
  19. A push () függvény segítségével illessze be a 39 elemet a verembe.
  20. A push () funkció segítségével illessze be a 89 elemet a verembe.
  21. A push () funkció segítségével illessze be a 25 elemet a verembe.
  22. Nyomtasson ki egy kis szöveget a konzolra.
  23. Hívja meg a createStack függvényt a fenti beszúrási műveletek végrehajtásához a veremben.
  24. Nyomtassa ki a verem méretét a konzolon más szöveg mellett.
  25. Nyomtassa ki az elemet a konzol verem tetején.
  26. Nyomtasson ki egy kis szöveget a konzolra.
  27. Törölje az elemet a verem tetején. Ezután visszaadja a veremben megmaradt elemeket.
  28. A fenti műveletek végrehajtásához hívja meg a createStack függvényt.
  29. A programnak a sikeres befejezés után vissza kell térnie az értékre.
  30. A funkciótest vége main ().

emplace () és swap ()

Ezek más beépített veremfunkciók:

  • emplace () - a konstrukciók majd új elemet illesztenek a verem tetejére.
  • swap () - kicseréli a verem tartalmát egy másik verem tartalmára.

3. példa:

#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();}}

Kimenet:

Itt van egy képernyőkép a kódról:

Kód Magyarázat:

  1. A funkcióinak használatához vegye fel az iostream fejlécfájlt kódunkba.
  2. Felvegye a verem fejléc fájlt a kódunkba, hogy használhassa a funkcióit.
  3. A funkcióinak használatához vegye be a kódunkba a cstdlib fejlécfájlt.
  4. Vegye fel az std névteret a kódunkba, hogy az osztályait hívás nélkül használhassa.
  5. Hívja meg a main () függvényt. A program logikája hozzáadódik ennek a függvénynek a törzséhez.
  6. Nyújtsa be az st1 nevű verem egész számok tárolására.
  7. Nyújtsa be az st2 nevű verem egész számok tárolására.
  8. Az emplace () függvény segítségével illessze be a 12 egész számot az st1 nevű verembe.
  9. Az emplace () függvény segítségével illessze be a 19 egész számot az st1 nevű verembe.
  10. Az emplace () függvény segítségével illessze be a 20 egész számot az st2 nevű verembe.
  11. Az emplace () függvény segítségével illessze be a 23 egész számot az st2 nevű verembe.
  12. A csere () funkcióval cserélje ki a két halom, st1 és st2 tartalmát. Az st1 köteg tartalmát át kell helyezni az st2 kötegbe. Az st2 köteg tartalmát át kell helyezni az st1 kötegbe.
  13. Nyomtasson ki egy kis szöveget a konzolra.
  14. A while utasítás és az empty () függvény segítségével ellenőrizheti, hogy az st1 verem nem üres-e.
  15. Nyomtassa ki az st1 köteg tartalmát a konzolra. A konzolra történő nyomtatáskor a "" teret ad a veremelemek között.
  16. A felső elem eltávolításához hajtsa végre a st (1) verem pop () funkcióját.
  17. A while utasítás törzsének vége.
  18. Nyomtasson ki egy kis szöveget a konzolra. Az endl egy C ++ kulcsszó a végsorhoz. Az egérmutatót a következő sorra helyezi, hogy onnan kezdje a nyomtatást.
  19. A while utasítás és az empty () függvény segítségével ellenőrizheti, hogy az st2 verem nem üres-e.
  20. Nyomtassa ki az st2 köteg tartalmát a konzolra. A konzolra történő nyomtatáskor a "" teret ad a veremelemek között.
  21. A felső elem eltávolításához hajtsa végre a pop () függvényt az verem st2-n.
  22. A while utasítás törzsének vége.
  23. A fő () függvény törzsének vége.

Verem az STL-be

Az STL (Standard Template Library) sablonosztályokkal rendelkezik, amelyek közös C ++ adatstruktúrákat biztosítanak. Ezért egy verem is megvalósítható az STL-ben. Ezt a könyvtárat egyszerűen belefoglaljuk a kódunkba, és verem meghatározására használjuk.

stack st;

A fenti szintaxis deklarál egy halmozott st elemet a T adattípus elemeire.

3. példa:

#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();}

Kimenet:

Itt van egy képernyőkép a kódról:

Kód Magyarázat:

  1. A funkcióinak használatához vegye fel az iostream fejlécfájlt kódunkba.
  2. Felvegye a verem fejléc fájlt a kódunkba, hogy használhassa a funkcióit.
  3. A funkcióinak használatához vegye be a kódunkba a cstdlib fejlécfájlt.
  4. Vegye fel az std névteret a kódunkba, hogy az osztályait hívás nélkül használhassa.
  5. Hívja meg a main () függvényt. A program logikát hozzá kell adni ennek a függvénynek a törzséhez.
  6. Nyújtson be egy köteg stt az egész adatok tárolására.
  7. Adja hozzá a 12 elemet a veremhez.
  8. Adja hozzá a 19 elemet a veremhez.
  9. Adja hozzá a 20 elemet a veremhez.
  10. Nyomtassa ki az elemet a konzol verem tetején.
  11. Nyomtassa ki a verem méretét a konzolon.
  12. A main () függvény törzsének vége.

Összegzés:

  • A verem egy olyan adatstruktúra, amely a LIFO (Last In first Out) technikán alapul.
  • Az std :: stack csak elemek hozzáadását és eltávolítását teszi lehetővé az egyik végéből.
  • Az std :: stack osztály egy tárolóadapter, amely hasonló adattípusú elemeket tartalmaz.
  • Verem különféle szekvencia-konténerekből hozható létre.
  • Ha nem ad meg tárolót, akkor alapértelmezés szerint a deque tárolót használja.
  • A push () funkció az elemek beszúrására szolgál a verembe.
  • A pop () funkció a legfelső elem eltávolítására szolgál a lépésből.
  • Az Üres () függvény annak ellenőrzésére szolgál, hogy a verem üres-e vagy sem.