std::stack::push
#include <stack>
void push(const value_type& val); // (1)
void push(value_type&& val); // (2) (since C++11)
Thêm một phần tử mới vào đỉnh của std::stack.
Tham số
val
- Giá trị của phần tử cần thêm vào đỉnh std::stack.
- Phiên bản (1) nhận tham chiếu hằng (
const value_type&
), cho phép truyền vào một đối tượng đã tồn tại. Đối tượng sẽ được sao chép (copy) vào std::stack. - Phiên bản (2) (từ C++11) nhận tham chiếu rvalue (
value_type&&
), cho phép di chuyển (move) đối tượng vào std::stack nếuval
là một rvalue, tránh việc sao chép không cần thiết, tối ưu hiệu suất.
Giá trị trả về
Không có giá trị trả về
Đặc điểm
- Thêm phần tử vào đỉnh:
push()
luôn thêm phần tử mới vào đỉnh std::stack. - Tăng kích thước:
push()
làm tăng kích thước của std::stack lên 1. - Hỗ trợ copy và move: Phiên bản (1) thực hiện sao chép phần tử được truyền vào. Phiên bản (2) (từ C++11) hỗ trợ di chuyển (move semantics), giúp tối ưu hiệu suất khi thêm các đối tượng lớn hoặc phức tạp vào std::stack.
- Dựa trên underlying container:
push()
của std::stack thực chất gọi hàmpush_back()
(đối với std::deque, std::list) hoặcpush_back()
(đối với std::vector) của underlying container. - Có thể ném ngoại lệ: Nếu việc cấp phát bộ nhớ cho phần tử mới thất bại,
push()
có thể ném ra ngoại lệ std::bad_alloc. Ngoài ra, nếu copy constructor (phiên bản 1) hoặc move constructor (phiên bản 2) củavalue_type
ném ngoại lệ,push()
cũng sẽ ném ngoại lệ. - Độ phức tạp: Độ phức tạp của
push()
làO(1)
- thời gian hằng số (amortized). Thao tác này thường rất nhanh vì nó chỉ liên quan đến việc cập nhật con trỏ đỉnh của stack.
Ví dụ
#include <iostream>
#include <stack>
int main() {
std::stack<int> mystack;
mystack.push(10); // Thêm 10 vào đỉnh stack
mystack.push(20); // Thêm 20 vào đỉnh stack
mystack.push(30); // Thêm 30 vào đỉnh stack
std::cout << "Top element: " << mystack.top() << '\n'; // Output: Top element: 30
return 0;
}
Move semantics
#include <iostream>
#include <stack>
#include <string>
int main() {
std::stack<std::string> mystack;
std::string str = "Hello";
mystack.push(str); // Sao chép str vào mystack
mystack.push(std::move(str)); // Di chuyển str vào mystack (str sẽ trở thành rỗng sau lời gọi này)
mystack.push("World"); // Tạo một đối tượng string tạm thời và di chuyển nó vào mystack
std::cout << "Top element: " << mystack.top() << '\n'; // Output: Top element: World
std::cout << "str after move: " << str << '\n'; // Output: str after move: (empty string)
return 0;
}
Các hàm liên quan
pop | Xóa phần tử ở đỉnh của std::stack |
size | Trả về số lượng phần tử hiện có trong std::stack |