Stack
Tento príklad ukazuje použitie std::stack
v C++17 na pridávanie, prístup, odoberanie prvkov a prácu so zásobníkom.
#include <iostream>
#include <stack>
#include <string>
using namespace std;
int main() {
// Deklarácia zásobníka pre reťazce
stack<string> myStack;
// Pridávanie prvkov na vrchol zásobníka
myStack.push("C++");
myStack.push("je");
myStack.push("výborný");
myStack.push("jazyk");
// Výpis vrchného prvku (top)
cout << "Vrchný prvok: " << myStack.top() << endl;
// Odstránenie vrchného prvku
myStack.pop();
cout << "Po pop(): Vrchný prvok je teraz: " << myStack.top() << endl;
// Pridanie nového prvku pomocou emplace()
myStack.emplace("moderný");
cout << "Po emplace(): Vrchný prvok je teraz: " << myStack.top() << endl;
// Výpis všetkých prvkov a ich odstránenie
cout << "Obsah zásobníka: ";
while (!myStack.empty()) {
cout << myStack.top() << " ";
myStack.pop();
}
cout << endl;
return 0;
}
Vysvetlenie kódu:
Deklarácia
std::stack<string>
stack<string> myStack;
std::stack
je LIFO (Last-In, First-Out) dátová štruktúra.- Používame ju na uchovanie reťazcov (
std::string
).
Pridanie prvkov na vrchol (
push()
)myStack.push("C++"); myStack.push("je"); myStack.push("výborný"); myStack.push("jazyk");
- Prvky sa pridávajú na vrchol zásobníka.
Získanie vrchného prvku (
top()
)cout << "Vrchný prvok: " << myStack.top() << endl;
top()
vráti referenciu na posledne pridaný prvok bez jeho odstránenia.
Odstránenie vrchného prvku (
pop()
)myStack.pop(); cout << "Po pop(): Vrchný prvok je teraz: " << myStack.top() << endl;
pop()
odstráni najnovší prvok.
Efektívne pridanie nového prvku (
emplace()
)myStack.emplace("moderný");
emplace()
je efektívnejšia verziapush()
, pretože konštruuje prvok priamo v zásobníku.
Výpis a vyprázdnenie zásobníka
while (!myStack.empty()) { cout << myStack.top() << " "; myStack.pop(); }
- Cez
empty()
kontrolujeme, či je zásobník prázdny. - Každý prvok vypíšeme a hneď ho odstránime (
pop()
).
- Cez
Očakávaný výstup:
Vrchný prvok: jazyk
Po pop(): Vrchný prvok je teraz: výborný
Po emplace(): Vrchný prvok je teraz: moderný
Obsah zásobníka: moderný výborný je C++