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
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:
- A funkcióinak használatához vegye fel az iostream fejlécfájlt kódunkba.
- Felvegye a verem fejléc fájlt a kódunkba, hogy használhassa a funkcióit.
- Vegye fel az std névteret a kódunkba, hogy az osztályait hívás nélkül használhassa.
- Hívja meg a main () függvényt. A program logikát hozzá kell adni ehhez a függvényhez.
- Hozzon létre egy verem st az egész értékek tárolásához.
- A push () függvény segítségével illessze be a 10 értéket a verembe.
- A push () függvény segítségével illessze be a 20 értéket a verembe.
- A push () függvény segítségével illessze be a 30 értéket a verembe.
- A push () függvény segítségével illessze be a 40 értéket a verembe.
- 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.
- 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.
- Használjon egy darab hurok és üres () függvényt, hogy ellenőrizze, hogy a verem NEM üres-e. A ! a NEM operátor.
- A verem aktuális tartalmának kinyomtatása a konzolra.
- Hívja meg a verem pop () függvényét.
- A while hurok testének vége.
- 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:
- A funkcióinak használata érdekében vegye fel az iostream fejléc fájlt a kódunkba.
- A verem fejlécfájljának beillesztése a kódunkba annak funkcióinak használata érdekében.
- Vegye fel az std névteret programunkba, hogy az osztályait hívás nélkül használhassa.
- Hozza létre a createStack függvényt, amellyel létrehozhatjuk a verem mystackjét. A verem egész számokat fog tartalmazni.
- A createStack függvény törzsének kezdete.
- Hozzon létre egy példát a mystack adattípusból, és adja meg neki az ms nevet.
- A while ciklus és az empty () függvény segítségével ellenőrizheti, hogy a verem üres-e.
- A while hurok testének kezdete.
- Használja a verem tetején tárolt top () függvényt. A \ t karakter új lapot hoz létre.
- A pop () függvény segítségével törölheti a verem tetején található elemet.
- A while hurok testének vége.
- Nyomtasson ki egy üres sort a konzolra.
- A createStack függvény törzsének vége.
- Hívja meg a main () függvényt. A programlogikát hozzá kell adni a main () függvény törzséhez.
- A funkciótest kezdete main ().
- Hozzon létre veremobjektumot st.
- A push () függvény segítségével illessze be a 32 elemet a verembe.
- A push () függvény segítségével illessze be a 21 elemet a verembe.
- A push () függvény segítségével illessze be a 39 elemet a verembe.
- A push () funkció segítségével illessze be a 89 elemet a verembe.
- A push () funkció segítségével illessze be a 25 elemet a verembe.
- Nyomtasson ki egy kis szöveget a konzolra.
- Hívja meg a createStack függvényt a fenti beszúrási műveletek végrehajtásához a veremben.
- Nyomtassa ki a verem méretét a konzolon más szöveg mellett.
- Nyomtassa ki az elemet a konzol verem tetején.
- Nyomtasson ki egy kis szöveget a konzolra.
- Törölje az elemet a verem tetején. Ezután visszaadja a veremben megmaradt elemeket.
- A fenti műveletek végrehajtásához hívja meg a createStack függvényt.
- A programnak a sikeres befejezés után vissza kell térnie az értékre.
- 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:
- A funkcióinak használatához vegye fel az iostream fejlécfájlt kódunkba.
- Felvegye a verem fejléc fájlt a kódunkba, hogy használhassa a funkcióit.
- A funkcióinak használatához vegye be a kódunkba a cstdlib fejlécfájlt.
- Vegye fel az std névteret a kódunkba, hogy az osztályait hívás nélkül használhassa.
- Hívja meg a main () függvényt. A program logikája hozzáadódik ennek a függvénynek a törzséhez.
- Nyújtsa be az st1 nevű verem egész számok tárolására.
- Nyújtsa be az st2 nevű verem egész számok tárolására.
- Az emplace () függvény segítségével illessze be a 12 egész számot az st1 nevű verembe.
- Az emplace () függvény segítségével illessze be a 19 egész számot az st1 nevű verembe.
- Az emplace () függvény segítségével illessze be a 20 egész számot az st2 nevű verembe.
- Az emplace () függvény segítségével illessze be a 23 egész számot az st2 nevű verembe.
- 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.
- Nyomtasson ki egy kis szöveget a konzolra.
- A while utasítás és az empty () függvény segítségével ellenőrizheti, hogy az st1 verem nem üres-e.
- 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.
- A felső elem eltávolításához hajtsa végre a st (1) verem pop () funkcióját.
- A while utasítás törzsének vége.
- 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.
- A while utasítás és az empty () függvény segítségével ellenőrizheti, hogy az st2 verem nem üres-e.
- 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.
- A felső elem eltávolításához hajtsa végre a pop () függvényt az verem st2-n.
- A while utasítás törzsének vége.
- 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.
stackst;
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:
- A funkcióinak használatához vegye fel az iostream fejlécfájlt kódunkba.
- Felvegye a verem fejléc fájlt a kódunkba, hogy használhassa a funkcióit.
- A funkcióinak használatához vegye be a kódunkba a cstdlib fejlécfájlt.
- Vegye fel az std névteret a kódunkba, hogy az osztályait hívás nélkül használhassa.
- Hívja meg a main () függvényt. A program logikát hozzá kell adni ennek a függvénynek a törzséhez.
- Nyújtson be egy köteg stt az egész adatok tárolására.
- Adja hozzá a 12 elemet a veremhez.
- Adja hozzá a 19 elemet a veremhez.
- Adja hozzá a 20 elemet a veremhez.
- Nyomtassa ki az elemet a konzol verem tetején.
- Nyomtassa ki a verem méretét a konzolon.
- 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.