C++ STL: Sử dụng Stack
Hi, xin chào các bạn đến với chủ đề : Học lập trình C++ STL.
Bài viết này chúng ta tìm hiểu cách sử dụng Stack.
I. Vài nét cơ bản về stack
– Là một loại container trong thư viện STL ( hiểu đơn giản là dạng thùng chứa dữ liệu)
– Nguyên lý cơ bản đó là vào sau thì ra trước, ông nào được push vào sau cùng,
thì khi pop ông ấy sẽ ra trước (giống như xếp kiện hàng)
– Không có hàm truy cập từng phần tử như hàm at() hay toán tử [] như vector hay array.
II. Các function chính trong lớp stack
1. Cách khai báo để sử dụng stack
#include <conio.h> #include<iostream> #include<stack> using namespace std; int main() { std::stack<int> stackData; stackData.push(0); stackData.push(1); stackData.push(2); stackData.push(3); _getch(); return 0; }
2. Lấy số lượng phần từ mà nó sở hữu:
=> Sử dụng hàm size()
std::stack<int> stackData; stackData.push(0); stackData.push(1); int size = stackData.size();
3. Đẩy dữ liệu vào và bỏ dữ liệu ra.
+ Sử dụng function push để đẩy dữ liệu vào, và bỏ dữ liệu ra với hàm pop
– Lưu ý: push ông nào vào trước, thì ông ấy sẽ có chỉ sốthứ tự trước.
– Nhưng khi hàm pop thì ông nào vào sau cùng sẽ được bỏ ra trước, và stack sẽ giảm dần số phần tử (nghĩa là bỏ là bỏ luôn)
std::stack<int> stackData; stackData.push(0); stackData.push(1); stackData.push(2); stackData.push(3); stackData.pop(); stackData.pop();
Ví dụ trong đoạn code trên, 0 push vào trước sẽ là phần tử đầu tiên của stack, tiếp theo là 1, 2, 3
Khi pop thì stack sẽ xóa ông 3 trước, sau đó đến ông 2.
4. Kiểm tra stack có tồn tại phần tử hay không.
Cũng sử dụng hàm empty(), nếu trống thì trả về true, và ngược lại trả về false.
5. Muốn hiện thị danh sách phần tử, hoặc lấy giá trị các phần từ trong stack
– Sử dụng hai hàm top()
std::stack<int> stackData; stackData.push(0); stackData.push(1); stackData.push(2); stackData.push(3); while (!stackData.empty()) { cout << '\t' << stackData.top(); stackData.pop(); } cout << '\n';
– Như vậy danh sách lấy dữ liệu từ phần từ push cuối cùng, nó sẽ hiện thị là: 3 2 1 0
– Khi hiển thị xong cũng là lúc danh sách về trống, do đó khi lấy dữ liệu thì phải lưu vào một mảng mới, và đổi lại thứ tự cho các phần tử.
6. Đổi giá trị hai stack cho nhau
– Sử dụng hàm swap
Điểm khác biệt stack so với array là 2 stack có thể khác nhau số phần tử, và chúng vẫn có thể hoán đổi cho nhau
std::stack<int> stackData; stackData.push(0); stackData.push(1); stackData.push(2); stackData.push(3); std::stack<int> stackData2; stackData2.push(10); stackData2.push(11); stackData2.push(12); stackData2.push(13); stackData2.push(14); stackData.swap(stackData2);