Chuyển tới nội dung chính

std::queue::push

#include <queue>

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 cuối std::queue.

Tham số

val

  • Giá trị của phần tử cần thêm vào cuối std::queue.
  • 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::queue.
  • 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::queue nếu val 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

  1. Thêm phần tử vào cuối: push() luôn thêm phần tử mới vào cuối std::queue.
  2. Tăng kích thước: push() làm tăng kích thước của std::queue lên 1.
  3. 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::queue.
  4. Dựa trên underlying container: push() của std::queue thực chất gọi hàm push_back() của underlying container (ví dụ: std::deque mặc định).
  5. 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ủa value_type ném ngoại lệ, push() cũng sẽ ném ngoại lệ.
  6. Độ phức tạp: Độ phức tạp của push()O(1) - thời gian hằng số (amortized). Thao tác này thường rất nhanh.

Ví dụ

#include <iostream>
#include <queue>

int main() {
std::queue<int> myqueue;

myqueue.push(10); // Thêm 10 vào cuối queue
myqueue.push(20); // Thêm 20 vào cuối queue
myqueue.push(30); // Thêm 30 vào cuối queue

std::cout << "Front element: " << myqueue.front() << '\n'; // Output: Front element: 10
std::cout << "Back element: " << myqueue.back() << '\n'; // Output: Back element: 30

return 0;
}

Move semantics

#include <iostream>
#include <queue>
#include <string>

int main() {
std::queue<std::string> myqueue;

std::string str = "Hello";
myqueue.push(str); // Sao chép str vào myqueue
myqueue.push(std::move(str)); // Di chuyển str vào myqueue (str sẽ trở thành rỗng sau lời gọi này)
myqueue.push("World"); // Tạo một đối tượng string tạm thời và di chuyển nó vào myqueue

std::cout << "Front element: " << myqueue.front() << '\n'; // Output: Front element: Hello
std::cout << "str after move: " << str << '\n'; // Output: str after move: (empty string)

return 0;
}

Các hàm liên quan

popXóa phần tử ở đầu của std::queue
sizeTrả về số lượng phần tử hiện có trong std::queue