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
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:
Evo snimke zaslona koda:
Code Objaลกnjenje:
- Ukljuฤite iostream datoteku zaglavlja u naลก kod da biste koristili njezine funkcije.
- Ukljuฤite datoteku zaglavlja hrpe u naลก kod da biste koristili njezine funkcije.
- Ukljuฤite prostor imena std u naลก kod da biste koristili njegove klase bez pozivanja.
- Pozovite funkciju main(). Programsku logiku treba dodati unutar ove funkcije.
- Stvorite stog st za pohranu cjelobrojnih vrijednosti.
- Koristite funkciju push() za umetanje vrijednosti 10 u stog.
- Koristite funkciju push() za umetanje vrijednosti 20 u stog.
- Koristite funkciju push() za umetanje vrijednosti 30 u stog.
- Koristite funkciju push() za umetanje vrijednosti 40 u stog.
- Upotrijebite funkciju pop() za uklanjanje gornjeg elementa iz niza, to jest 40. Gornji element sada postaje 30.
- Upotrijebite funkciju pop() za uklanjanje gornjeg elementa iz niza, to jest 30. Gornji element sada postaje 20.
- Upotrijebite petlju while i funkciju empty() da provjerite da li stog NIJE prazan. The ! je operator NOT.
- Ispis trenutnog sadrลพaja steka na konzoli.
- Pozovite funkciju pop() na stogu.
- Kraj tijela while petlje.
- 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:
Evo snimke zaslona koda:
Code Objaลกnjenje:
- Ukljuฤite iostream datoteku zaglavlja u naลก kod kako biste koristili njezine funkcije.
- Ukljuฤite datoteku zaglavlja hrpe u naลก kod kako biste koristili njezine funkcije.
- Ukljuฤite prostor imena std u naลก program kako biste koristili njegove klase bez pozivanja.
- Napravite funkciju createStack koju moลพemo koristiti za stvaranje stoga mystack. Stog ฤe sadrลพavati skup cijelih brojeva.
- Poฤetak tijela funkcije createStack.
- Stvorite instancu vrste podataka mystack i dajte joj ime ms.
- Koristite while petlju i funkciju empty() da provjerite je li stog prazan.
- Poฤetak tijela while petlje.
- Koristite funkciju top() pohranjenu na vrhu stoga. Znak \t stvorit ฤe novu karticu.
- Upotrijebite funkciju pop() za brisanje elementa na vrhu niza.
- Kraj tijela while petlje.
- Ispiลกite prazan redak na konzoli.
- Kraj tijela funkcije createStack.
- Pozovite funkciju main(). Programsku logiku treba dodati unutar tijela funkcije main().
- Poฤetak tijela funkcije main().
- Stvorite stack objekt st.
- Koristite funkciju push() za umetanje elementa 32 u stog.
- Koristite funkciju push() za umetanje elementa 21 u stog.
- Koristite funkciju push() za umetanje elementa 39 u stog.
- Koristite funkciju push() za umetanje elementa 89 u stog.
- Koristite funkciju push() za umetanje elementa 25 u stog.
- Ispiลกite tekst na konzoli.
- Pozovite funkciju createStack da biste izvrลกili gornje operacije umetanja u stog.
- Ispiลกite veliฤinu hrpe na konzoli uz ostali tekst.
- Ispiลกite element na vrhu hrpe na konzoli.
- Ispiลกite tekst na konzoli.
- Izbriลกite element na vrhu hrpe. Zatim ฤe vratiti elemente koji su ostali u stogu.
- Pozovite funkciju createStack da biste izvrลกili gore navedene operacije.
- Program mora vratiti vrijednost nakon uspjeลกnog zavrลกetka.
- 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:
Evo snimke zaslona koda:
Code Objaลกnjenje:
- Ukljuฤite iostream datoteku zaglavlja u naลก kod da biste koristili njezine funkcije.
- Ukljuฤite datoteku zaglavlja hrpe u naลก kod da biste koristili njezine funkcije.
- Ukljuฤite cstdlib datoteku zaglavlja u naลก kod da biste koristili njezine funkcije.
- Ukljuฤite prostor imena std u naลก kod da biste koristili njegove klase bez pozivanja.
- Pozovite funkciju main(). Programska logika bit ฤe dodana unutar tijela ove funkcije.
- Deklarirajte stog pod nazivom st1 za pohranu cjelobrojnih vrijednosti.
- Deklarirajte stog pod nazivom st2 za pohranu cjelobrojnih vrijednosti.
- Upotrijebite funkciju emplace() za umetanje cijelog broja 12 u stog pod nazivom st1.
- Upotrijebite funkciju emplace() za umetanje cijelog broja 19 u stog pod nazivom st1.
- Upotrijebite funkciju emplace() za umetanje cijelog broja 20 u stog pod nazivom st2.
- Upotrijebite funkciju emplace() za umetanje cijelog broja 23 u stog pod nazivom st2.
- 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.
- Ispiลกite tekst na konzoli.
- Upotrijebite naredbu while i funkciju empty() da provjerite je li stog st1 prazan.
- Ispiลกite sadrลพaj steka st1 na konzoli. โ โ dodaje razmak izmeฤu elemenata hrpe kada ih ispisuje na konzoli.
- Izvrลกite funkciju pop() na stogu st1 da biste uklonili gornji element.
- Kraj tijela naredbe while.
- 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.
- Upotrijebite naredbu while i funkciju empty() da provjerite je li stog st2 prazan.
- Ispiลกite sadrลพaj steka st2 na konzoli. โ โ dodaje razmak izmeฤu elemenata hrpe kada ih ispisuje na konzoli.
- Izvrลกite funkciju pop() na stogu st2 da biste uklonili gornji element.
- Kraj tijela naredbe while.
- 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:
Evo snimke zaslona koda:
Code Objaลกnjenje:
- Ukljuฤite iostream datoteku zaglavlja u naลก kod da biste koristili njezine funkcije.
- Ukljuฤite datoteku zaglavlja hrpe u naลก kod da biste koristili njezine funkcije.
- Ukljuฤite cstdlib datoteku zaglavlja u naลก kod da biste koristili njezine funkcije.
- Ukljuฤite prostor imena std u naลก kod da biste koristili njegove klase bez pozivanja.
- Pozovite funkciju main(). Programsku logiku treba dodati unutar tijela ove funkcije.
- Deklarirajte stack st za pohranjivanje cjelobrojnih podataka.
- Dodajte element 12 u hrpu.
- Dodajte element 19 u hrpu.
- Dodajte element 20 u hrpu.
- Ispiลกite element na vrhu hrpe na konzoli.
- Ispiลกite veliฤinu hrpe na konzoli.
- 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.






