Rakd be C++ STL példával

Mi az std::stack?

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

Az std::stack osztály egy konténeradapter. A tárolóobjektumok hasonló adattípusú adatokat tartalmaznak. Különféle sorozattárolókból hozhat létre veremeket. Ha nincs megadva tároló, akkor alapértelmezés szerint a deque contente lesz használatban. A tárolóadapterek nem támogatják az iterátorokat, így nem használhatók adatok manipulálására.

Stack szintaxis

Verem létrehozásához tartalmaznunk kell a fejlécfájlt a kódunkban. Ezután ezt a szintaxist használjuk az std::stack:

template <class Type, class Container = deque<Type> > class stack;
  • típus – az std::stackben található elem típusa. Bármilyen érvényes lehet C++ típus vagy akár egy felhasználó által meghatározott típus.
  • Konténer – az alapul szolgáló tárolóobjektum típusa.

Tagtípusok

Íme a veremtag típusok:

  • value_type- Az első sablonparaméter, T. Az elemtípusokat jelöli.
  • container_type- A második sablonparaméter, a Container. Jelzi az alapul szolgáló tárolótípust.
  • size_type- Előjel nélküli integrál típus.

Operaa Stackben

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

  • push – Egy elemet hozzáad/tol a verembe.
  • pop – Eltávolít/feldob egy elemet a veremből.
  • peek – A verem legfelső elemét adja vissza eltávolítása nélkül.
  • isFull – Ellenőrzi, hogy egy verem megtelt-e.
  • isEmpty – Ellenőrzi, hogy egy verem üres-e.

Stack megvalósítás

Stack megvalósítás

Step 1) Kezdetben van egy üres kötegünk. Egy üres verem teteje -1-re van állítva.

Step 2) Ezután az 5. elemet betoltuk a verembe. A köteg teteje az 5-ös elemre fog mutatni.

Step 3) Ezután az 50 elemet betoltuk a kötegbe. A verem teteje eltolódik, és az 50-es elemre mutat.

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

push() és pop()

A verem::push() függvények új elemet adnak a verem tetejére. A verem mérete 1-gyel nő a beillesztés után. A függvény a következő szintaxist veszi fel:

stack.push(value)

Az érték a verembe beszúrandó elem.

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

stack.pop()

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

Példa 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();
	}
}

output:

push() és pop()

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

push() és pop()

Kód magyarázata:

  1. Szerelje be az iostream fejlécfájlt a kódunkba a funkcióinak használatához.
  2. Szerelje be a verem fejlécfájlját a kódunkba a funkcióinak használatához.
  3. Szerelje be 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áját hozzá kell adni ebben a függvényben.
  5. Hozzon létre egy st verem az egész értékek tárolására.
  6. A push() függvény segítségével illessze be a 10-es értéket a verembe.
  7. A push() függvény segítségével illessze be a 20-es értéket a verembe.
  8. A push() függvény segítségével illessze be a 30-es értéket a verembe.
  9. A push() függvény segítségével illessze be a 40-es értéket a verembe.
  10. A pop() függvénnyel távolítsa el a veremből a legfelső elemet, azaz a 40-et. A felső elem most 30 lesz.
  11. A pop() függvénnyel távolítsa el a veremből a legfelső elemet, azaz a 30-at. A felső elem mostantól 20 lesz.
  12. Használja a while ciklust és az üres() függvényt annak ellenőrzésére, hogy a verem NEM üres-e. A ! a NOT operátor.
  13. A verem aktuális tartalmának kinyomtatása a konzolon.
  14. Hívja meg a pop() függvényt a veremben.
  15. A while ciklus törzsének vége.
  16. A main() függvénytörzs vége.

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

A veremek beépített funkciókkal rendelkeznek, amelyek segítségével játszhatsz a veremmel és annak értékeivel. Ezek tartalmazzák:

  • üres()- ellenőrzi, hogy egy verem üres-e vagy sem.
  • size()- a verem méretét adja vissza, vagyis a veremben lévő elemek számát.
  • top()- eléri a verem elemet a tetején.

Példa 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;
}

output:

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

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

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

Kód magyarázata:

  1. Szerelje be az iostream fejlécfájlt a kódunkba a funkcióinak használatához.
  2. Szerelje be a verem fejlécfájlját a kódunkba, hogy használni tudja a funkcióit.
  3. Szerelje be az std névteret a programunkba, hogy az osztályait hívás nélkül használhassa.
  4. Hozzuk létre a createStack függvényt, amellyel létrehozhatjuk a verem mystacket. A verem egész számokat tartalmaz.
  5. A createStack függvény törzsének eleje.
  6. Hozzon létre egy példányt a mystack adattípusból, és adja meg az ms nevet.
  7. Használja a while ciklust és az üres() függvényt annak ellenőrzésére, hogy a verem üres-e.
  8. A while ciklus törzsé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énnyel törölheti a verem tetején lévő elemet.
  11. A while ciklus törzsének vége.
  12. Nyomtasson 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 program logikáját hozzá kell adni a main() függvény törzséhez.
  15. A main() függvény törzsének kezdete.
  16. Hozzon létre egy verem objektumot st.
  17. A push() függvény segítségével illessze be a 32-es elemet a verembe.
  18. A push() függvény segítségével illessze be a 21-es elemet a verembe.
  19. A push() függvény segítségével illessze be a 39-es elemet a verembe.
  20. A push() függvény segítségével illessze be a 89-es elemet a verembe.
  21. A push() függvény segítségével illessze be a 25-es elemet a verembe.
  22. Nyomtasson szöveget a konzolra.
  23. Hívja a createStack függvényt a fenti beszúrási műveletek végrehajtásához a verembe.
  24. Nyomtassa ki a köteg méretét a konzolon a többi szöveg mellé.
  25. Nyomtassa ki a konzolon lévő köteg tetején lévő elemet.
  26. Nyomtasson szöveget a konzolra.
  27. Törölje a verem tetején lévő elemet. Ezután visszaadja a veremben maradt elemeket.
  28. Hívja a createStack függvényt a fenti műveletek végrehajtásához.
  29. A programnak értéket kell visszaadnia a sikeres befejezés után.
  30. A main() függvény törzsének vége.

emplace() és swap()

Ezek további beépített veremfunkciók:

  • Az emplace()- megszerkeszti, majd új elemet szúr be a verem tetejére.
  • swap() – kicseréli a verem tartalmát egy másik verem tartalmával.

Példa 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();
	}
}

output:

emplace()& swap()

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

emplace()& swap()

Kód magyarázata:

  1. Szerelje be az iostream fejlécfájlt a kódunkba a funkcióinak használatához.
  2. Szerelje be a verem fejlécfájlját a kódunkba a funkcióinak használatához.
  3. Szerelje be a cstdlib fejlécfájlt a kódunkba a funkcióinak használatához.
  4. Szerelje be 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 bekerül a függvény törzsébe.
  6. Deklaráljon egy st1 nevű veremet az egész értékek tárolására.
  7. Deklaráljon egy st2 nevű veremet az egész értékek tárolására.
  8. Használja az emplace() függvényt a 12 egész szám beszúrásához az st1 nevű verembe.
  9. Használja az emplace() függvényt a 19 egész szám beszúrásához az st1 nevű verembe.
  10. Használja az emplace() függvényt a 20 egész szám beszúrásához az st2 nevű verembe.
  11. Használja az emplace() függvényt a 23 egész szám beszúrásához az st2 nevű verembe.
  12. A swap() függvény segítségével felcserélheti a két verem, az st1 és az st2 tartalmát. Az st1 verem tartalmát át kell helyezni az st2 verembe. Az st2 verem tartalmát át kell helyezni az st1 verembe.
  13. Nyomtasson szöveget a konzolra.
  14. Használja a while utasítást és az üres() függvényt annak ellenőrzésére, hogy az st1 verem nem üres-e.
  15. Nyomtassa ki az st1 verem tartalmát a konzolon. A konzolra való nyomtatáskor a " " helyet ad a veremelemek között.
  16. Hajtsa végre a pop() függvényt az st1 veremben a felső elem eltávolításához.
  17. A while utasítás törzsének vége.
  18. Nyomtasson szöveget a konzolra. A endl egy C++ kulcsszó a végsorhoz. Az egérkurzort a következő sorra mozgatja, hogy onnan kezdje meg a nyomtatást.
  19. Használja a while utasítást és az üres() függvényt annak ellenőrzésére, hogy az st2 verem nem üres-e.
  20. Nyomtassa ki az st2 verem tartalmát a konzolon. A konzolra való nyomtatáskor a " " helyet ad a veremelemek között.
  21. Hajtsa végre a pop() függvényt az st2 veremben a felső elem eltávolításához.
  22. A while utasítás törzsének vége.
  23. A main() függvény törzsének vége.

Stack STL-ben

Az STL (Standard Template Library) sablonosztályokkal rendelkezik, amelyek közös C++ adatstruktúrák. Ezért egy verem STL-ben is megvalósítható. Egyszerűen beépítjük ezt a könyvtárat a kódunkba, és egy verem meghatározására használjuk.

stack<T> st; 

A fenti szintaxis egy st verem deklarálja a T adattípusú elemeket.

Példa 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();  
}

output:

Stack STL-ben

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

Stack STL-ben

Kód magyarázata:

  1. Szerelje be az iostream fejlécfájlt a kódunkba a funkcióinak használatához.
  2. Szerelje be a verem fejlécfájlját a kódunkba a funkcióinak használatához.
  3. Szerelje be a cstdlib fejlécfájlt a kódunkba a funkcióinak használatához.
  4. Szerelje be 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áját hozzá kell adni a függvény törzséhez.
  6. Deklaráljon egy verem st értéket az egész adatok tárolására.
  7. Adja hozzá a 12-es elemet a veremhez.
  8. Adja hozzá a 19-es elemet a veremhez.
  9. Adja hozzá a 20-es elemet a veremhez.
  10. Nyomtassa ki a konzolon lévő köteg tetején lévő elemet.
  11. Nyomtassa ki a köteg méretét a konzolra.
  12. A main() függvény törzsének vége.

Összegzésként

  • A verem egy olyan adatstruktúra, amely a LIFO (Last In first Out) technikán alapul.
  • Az std::stack csak az egyik végéről teszi lehetővé az elemek hozzáadását és eltávolítását.
  • Az std::stack osztály egy konténeradapter, amely hasonló adattípusú elemeket tartalmaz.
  • Egy verem különböző sorozattárolókból hozható létre.
  • Ha nem ad meg tárolót, a rendszer alapértelmezés szerint a visszavonási tárolót használja.
  • A push() függvény arra szolgál, hogy elemeket helyezzen be a verembe.
  • A pop() függvény a lépés legfelső elemének eltávolítására szolgál.
  • Az üres() függvény annak ellenőrzésére szolgál, hogy egy verem üres-e vagy sem.

Napi Guru99 hírlevél

Kezdje a napját a legfrissebb és legfontosabb mesterséges intelligenciával kapcsolatos hírekkel, amelyeket azonnal kézbesítünk.