Slagati u C++ STL s primjerom

Što je std::stack?

Stog je struktura podataka koja funkcionira na temelju tehnike LIFO (Last In First Out). Std::stack omogućuje dodavanje i uklanjanje elemenata samo s jednog kraja.

Klasa std::stack je adapter spremnika. Objekti spremnika sadrže podatke sličnog tipa podataka. Možete stvoriti hrpu iz različitih spremnika niza. Ako nije naveden spremnik, prema zadanim postavkama koristit će se deque containe. Adapteri spremnika ne podržavaju iteratore, pa se ne mogu koristiti za manipuliranje podacima.

Sintaksa hrpe

Da bismo stvorili stog, moramo uključiti datoteku zaglavlja u našem kodu. Zatim koristimo ovu sintaksu da definiramo std::stack:

template <class Type, class Container = deque<Type> > class stack;
  • Tip – je tip elementa sadržanog u std::stack. Može biti bilo koji valjan C++ tipa ili čak korisnički definiranog tipa.
  • Kontejner – je Vrsta temeljnog objekta spremnika.

Vrste članova

Evo tipova članova stoga:

  • value_type- Prvi parametar predloška, ​​T. Označava tipove elemenata.
  • container_type- Drugi parametar predloška, ​​Container. Označava temeljni tip spremnika.
  • size_type- Nepredpisani integralni tip.

Operacije u Stacku

A C++ stog podržava sljedeće osnovne operacije:

  • push – Dodaje/gura stavku u stog.
  • pop – Uklanja/iskače stavku sa hrpe.
  • peek – Vraća gornju stavku snopa bez uklanjanja.
  • isFull – Provjerava je li stog pun.
  • isEmpty – Provjerava je li stog prazan.

Implementacija stoga

Implementacija stoga

Korak 1) U početku imamo prazan stog. Vrh praznog stoga postavljen je na -1.

Korak 2) Zatim smo gurnuli element 5 u stog. Vrh hrpe pokazat će na element 5.

Korak 3) Zatim smo gurnuli element 50 u stog. Vrh hrpe se pomiče i pokazuje na element 50.

Korak 4) Zatim smo izveli operaciju iskakanja, uklanjajući gornji element iz hrpe. Element 50 je izvučen iz hrpe. Vrh hrpe sada pokazuje na element 5.

push() i pop()

Funkcija stack::push() dodaje novu stavku na vrh stoga. Veličina hrpe se povećava za 1 nakon umetanja. Funkcija ima ovu sintaksu:

stack.push(value)

Vrijednost je stavka koju treba umetnuti u stog.

Funkcija stack:: pop() uklanja gornji element snopa. Ovo je najnovija stavka na hrpi. Veličina hrpe se smanjuje za 1 nakon uklanjanja. Evo sintakse funkcije:

stack.pop()

Funkcija ne uzima parametre.

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

Izlaz:

push() i pop()

Evo snimke zaslona koda:

push() i pop()

Objašnjenje koda:

  1. Uključite iostream datoteku zaglavlja u naš kod da biste koristili njezine funkcije.
  2. Uključite datoteku zaglavlja hrpe u naš kod da biste koristili njezine funkcije.
  3. Uključite prostor imena std u naš kod da biste koristili njegove klase bez pozivanja.
  4. Pozovite funkciju main(). Programsku logiku treba dodati unutar ove funkcije.
  5. Stvorite stog st za pohranu cjelobrojnih vrijednosti.
  6. Koristite funkciju push() za umetanje vrijednosti 10 u stog.
  7. Koristite funkciju push() za umetanje vrijednosti 20 u stog.
  8. Koristite funkciju push() za umetanje vrijednosti 30 u stog.
  9. Koristite funkciju push() za umetanje vrijednosti 40 u stog.
  10. Upotrijebite funkciju pop() za uklanjanje gornjeg elementa iz niza, to jest 40. Gornji element sada postaje 30.
  11. Upotrijebite funkciju pop() za uklanjanje gornjeg elementa iz niza, to jest 30. Gornji element sada postaje 20.
  12. Upotrijebite petlju while i funkciju empty() da provjerite da li stog NIJE prazan. The ! je operator NOT.
  13. Ispis trenutnog sadržaja steka na konzoli.
  14. Pozovite funkciju pop() na stogu.
  15. Kraj tijela while petlje.
  16. Kraj tijela funkcije main().

prazno(), veličina(), vrh()

Skupovi imaju ugrađene funkcije koje možete koristiti za igranje s nizom i njegovim vrijednostima. To uključuje:

  • empty()- provjerava da li je stog prazan ili ne.
  • size()- vraća veličinu steka, odnosno broj elemenata u stogu.
  • top()- pristupa elementu hrpe na vrhu.

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

Izlaz:

prazno(),veličina(),top()

Evo snimke zaslona koda:

prazno(),veličina(),top()

Objašnjenje koda:

  1. Uključite iostream datoteku zaglavlja u naš kod kako biste koristili njezine funkcije.
  2. Uključite datoteku zaglavlja hrpe u naš kod kako biste koristili njezine funkcije.
  3. Uključite prostor imena std u naš program kako biste koristili njegove klase bez pozivanja.
  4. Napravite funkciju createStack koju možemo koristiti za stvaranje stoga mystack. Stog će sadržavati skup cijelih brojeva.
  5. Početak tijela funkcije createStack.
  6. Stvorite instancu vrste podataka mystack i dajte joj ime ms.
  7. Koristite while petlju i funkciju empty() da provjerite je li stog prazan.
  8. Početak tijela while petlje.
  9. Koristite funkciju top() pohranjenu na vrhu stoga. Znak \t stvorit će novu karticu.
  10. Upotrijebite funkciju pop() za brisanje elementa na vrhu niza.
  11. Kraj tijela while petlje.
  12. Ispišite prazan redak na konzoli.
  13. Kraj tijela funkcije createStack.
  14. Pozovite funkciju main(). Programsku logiku treba dodati unutar tijela funkcije main().
  15. Početak tijela funkcije main().
  16. Stvorite stack objekt st.
  17. Koristite funkciju push() za umetanje elementa 32 u stog.
  18. Koristite funkciju push() za umetanje elementa 21 u stog.
  19. Koristite funkciju push() za umetanje elementa 39 u stog.
  20. Koristite funkciju push() za umetanje elementa 89 u stog.
  21. Koristite funkciju push() za umetanje elementa 25 u stog.
  22. Ispišite tekst na konzoli.
  23. Pozovite funkciju createStack da biste izvršili gornje operacije umetanja u stog.
  24. Ispišite veličinu hrpe na konzoli uz ostali tekst.
  25. Ispišite element na vrhu hrpe na konzoli.
  26. Ispišite tekst na konzoli.
  27. Izbrišite element na vrhu hrpe. Zatim će vratiti elemente koji su ostali u stogu.
  28. Pozovite funkciju createStack da biste izvršili gore navedene operacije.
  29. Program mora vratiti vrijednost nakon uspješnog završetka.
  30. Kraj tijela funkcije main().

emplace() i swap()

Ovo su druge ugrađene funkcije snopa:

  • emplace() - konstruira zatim umeće novi element na vrh hrpe.
  • swap() - razmjenjuje sadržaj steka sa sadržajem drugog steka.

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

Izlaz:

emplace()& swap()

Evo snimke zaslona koda:

emplace()& swap()

Objašnjenje koda:

  1. Uključite iostream datoteku zaglavlja u naš kod da biste koristili njezine funkcije.
  2. Uključite datoteku zaglavlja hrpe u naš kod da biste koristili njezine funkcije.
  3. Uključite cstdlib datoteku zaglavlja u naš kod da biste koristili njezine funkcije.
  4. Uključite prostor imena std u naš kod da biste koristili njegove klase bez pozivanja.
  5. Pozovite funkciju main(). Programska logika bit će dodana unutar tijela ove funkcije.
  6. Deklarirajte stog pod nazivom st1 za pohranu cjelobrojnih vrijednosti.
  7. Deklarirajte stog pod nazivom st2 za pohranu cjelobrojnih vrijednosti.
  8. Upotrijebite funkciju emplace() za umetanje cijelog broja 12 u stog pod nazivom st1.
  9. Upotrijebite funkciju emplace() za umetanje cijelog broja 19 u stog pod nazivom st1.
  10. Upotrijebite funkciju emplace() za umetanje cijelog broja 20 u stog pod nazivom st2.
  11. Upotrijebite funkciju emplace() za umetanje cijelog broja 23 u stog pod nazivom st2.
  12. Upotrijebite funkciju swap() za izmjenu sadržaja dvaju hrpa, st1 i st2. Sadržaj snopa st1 treba premjestiti na snop st2. Sadržaj snopa st2 treba premjestiti na snop st1.
  13. Ispišite tekst na konzoli.
  14. Upotrijebite naredbu while i funkciju empty() da provjerite je li stog st1 prazan.
  15. Ispišite sadržaj steka st1 na konzoli. ” ” dodaje razmak između elemenata hrpe kada ih ispisuje na konzoli.
  16. Izvršite funkciju pop() na stogu st1 da biste uklonili gornji element.
  17. Kraj tijela naredbe while.
  18. Ispišite tekst na konzoli. Kraj je a C++ ključna riječ za završni redak. Pomiče kursor miša u sljedeći redak kako bi od tamo započeo ispis.
  19. Upotrijebite naredbu while i funkciju empty() da provjerite je li stog st2 prazan.
  20. Ispišite sadržaj steka st2 na konzoli. ” ” dodaje razmak između elemenata hrpe kada ih ispisuje na konzoli.
  21. Izvršite funkciju pop() na stogu st2 da biste uklonili gornji element.
  22. Kraj tijela naredbe while.
  23. Kraj tijela funkcije main().

Stog u STL-u

STL (Standardna biblioteka predložaka) dolazi s klasama predložaka koje pružaju zajedničke C++ strukture podataka. Stoga se stog također može implementirati u STL-u. Jednostavno uključimo ovu biblioteku u naš kod i koristimo je za definiranje stoga.

stack<T> st; 

Gornja sintaksa deklarira stog prema elementima tipa podataka T.

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

Izlaz:

Stog u STL-u

Evo snimke zaslona koda:

Stog u STL-u

Objašnjenje koda:

  1. Uključite iostream datoteku zaglavlja u naš kod da biste koristili njezine funkcije.
  2. Uključite datoteku zaglavlja hrpe u naš kod da biste koristili njezine funkcije.
  3. Uključite cstdlib datoteku zaglavlja u naš kod da biste koristili njezine funkcije.
  4. Uključite prostor imena std u naš kod da biste koristili njegove klase bez pozivanja.
  5. Pozovite funkciju main(). Programsku logiku treba dodati unutar tijela ove funkcije.
  6. Deklarirajte stack st za pohranjivanje cjelobrojnih podataka.
  7. Dodajte element 12 u hrpu.
  8. Dodajte element 19 u hrpu.
  9. Dodajte element 20 u hrpu.
  10. Ispišite element na vrhu hrpe na konzoli.
  11. Ispišite veličinu hrpe na konzoli.
  12. Kraj tijela funkcije main().

Rezime

  • Stog je struktura podataka koja funkcionira na temelju tehnike LIFO (Last In First Out).
  • Std::stack dopušta samo dodavanje i uklanjanje stavki s jednog kraja.
  • Klasa std::stack je adapter spremnika koji sadrži stavke sličnog tipa podataka.
  • Stog se može stvoriti iz različitih spremnika niza.
  • Ako ne navedete spremnik, prema zadanim će se postavkama koristiti deque spremnik.
  • Funkcija push() služi za umetanje stavki u hrpu.
  • Funkcija pop() služi za uklanjanje gornje stavke iz koraka.
  • Funkcija empty() služi za provjeru je li stog prazan ili ne.