stack & queue
std::stack (LIFO — Last In First Out) push()/pop()/top() deta hai — sirf top element ko access kar sakte ho. std::queue (FIFO — First In First Out) push()/pop()/front()/back() deta hai — front se remove hota hai, back mein add hota hai.
Dono "container adapters" hain — internally kisi doosre container (default: deque) ko use karke ek limited interface dete hain, jo unke intended use-case ke liye clean aur mistake-proof hai.
#include <stack>
#include <queue>
using namespace std;
int main() {
stack<int> st;
st.push(1); st.push(2); st.push(3);
cout << st.top() << endl; // 3 (last pushed)
st.pop();
cout << st.top() << endl; // 2
queue<int> q;
q.push(1); q.push(2); q.push(3);
cout << q.front() << endl; // 1 (first pushed)
q.pop();
cout << q.front() << endl; // 2
return 0;
}- stack = LIFO (push/pop/top)
- queue = FIFO (push/pop/front/back)
- Dono "container adapters" hain — limited, purpose-built interface
priority_queue ek special queue hai jo hamesha sabse "bada" (default: max-heap) element top par rakhta hai — insertion order matter nahi karta, top() hamesha current maximum deta hai. Internally ek heap data structure use karta hai.
#include <queue>
priority_queue<int> pq;
pq.push(3); pq.push(1); pq.push(4); pq.push(1); pq.push(5);
while (!pq.empty()) {
cout << pq.top() << " "; // 5 4 3 1 1 — descending order!
pq.pop();
}deque (header <deque>) dono ends (front aur back) se O(1) insert/remove support karta hai — vector sirf end se fast hai, deque dono taraf se. stack aur queue internally by default deque use karte hain.
#include <deque>
deque<int> dq;
dq.push_back(1);
dq.push_front(0);
dq.push_back(2);
// dq: 0, 1, 2
for (int n : dq) cout << n << " ";