De ce contează?
La un teanc de farfurii ai trei mișcări: pui una deasupra, te uiți care e deasupra, sau o iei pe cea de deasupra. Atât. Stiva din STL îți dă fix aceste trei operații, gata făcute, ca să nu mai scrii nimic de mână.
Operațiile fundamentale
Orice stivă oferă patru operații, toate la vârf:
| Operație | Ce face | Cost |
|---|---|---|
push(x) | adaugă x în vârf | O(1) |
pop() | elimină vârful | O(1) |
top() | citește vârful (fără a-l scoate) | O(1) |
empty() | spune dacă e goală | O(1) |
Toate operațiile sunt O(1) — instantanee, indiferent câte elemente are stiva. Asta o face foarte eficientă acolo unde se potrivește.
std::stack din STL
În loc să implementezi stiva de mână, folosești stack din STL — testat și fără bug-uri de indici:
#include <iostream>
#include <stack>
using namespace std;
int main() {
stack<int> s;
s.push(10);
s.push(20);
s.push(30);
cout << s.top() << "\n"; // 30 (varful, nescos)
s.pop(); // scot 30
cout << s.top() << "\n"; // 20
cout << s.size() << "\n"; // 2
cout << s.empty() << "\n"; // 0 (nu e goala)
return 0;
}Atenție: top() și pop() sunt separate
La std::stack, pop() nu întoarce valoarea — e void. Dacă vrei valoarea scoasă, o citești cu top() înainte de pop():
int x = s.top(); // citesc valoarea
s.pop(); // apoi o elimin
cout << x << "\n";E o sursă frecventă de confuzie pentru cei veniți din alte limbaje, unde pop întoarce elementul.
Golirea unei stive
Nu există o funcție clear. Scoți elementele cât timp nu e goală:
while (!s.empty()) {
cout << s.top() << " "; // 20 10 (in ordine inversa)
s.pop();
}Asta afișează elementele în ordine inversă intrării — comportamentul LIFO.
Vizualizare
Urmărește efectul fiecărei operații asupra vârfului:
Folosește ← și → pentru a urmări fiecare push/pop. top() doar evidențiază vârful, fără să-l mute.
Capcane la operațiile cu stiva:
- Aștepți ca
pop()să întoarcă valoarea: lastd::stackevoid. Citește cutop()înainte depop(). top()/pop()pe stivă goală: comportament nedefinit. Verifică!s.empty()întâi.- Cauți
clear(): nu există; golești cu o buclăwhile (!empty()) pop(). - Uiți
#include <stack>:std::stacknu e recunoscut fără el.
Recapitulare
- Stiva are patru operații O(1):
push,pop,top,empty. - La
std::stack,pop()evoid— ia valoarea cutop()înainte de a o scoate. - Verifică mereu
!empty()înainte detop()/pop(); golești printr-o buclă.