std::queue::swap
#include <queue>
Hoán đổi nội dung của hai std::queue với nhau.
void swap(queue& other);
Tham số
other
- Tham chiếu đến std::queue khác mà bạn muốn hoán đổi nội dung. other phải là một std::queue có cùng kiểu phần tử và kiểu container underlying với std::queue hiện tại.
Giá trị trả về
Không có giá trị trả về
Đặc điểm
- Hoán đổi nội dung:
swap()
hoán đổi toàn bộ nội dung của hai std::queue, bao gồm tất cả các phần tử và kích thước của chúng. - noexcept:
swap()
được đánh dấu lànoexcept
(kể từ C++11), nghĩa là nó được đảm bảo không ném ra ngoại lệ nào. - An toàn: Sau khi gọi
swap()
, các iterator, tham chiếu, và con trỏ ban đầu trỏ đến các phần tử của std::queue này sẽ trỏ đến các phần tử của std::queue kia (nếu underlying container của chúng hỗ trợ). - Phiên bản non-member std::swap: Ngoài hàm thành viên
swap()
, C++ còn cung cấp phiên bản non-member std::swap (trong<algorithm>
) có thể được sử dụng để hoán đổi hai std::queue. Phiên bản non-member thường được ưu tiên hơn vì nó khái quát hơn và có thể hoạt động với nhiều kiểu dữ liệu khác. - Hiệu quả:
swap()
thường được thực hiện với độ phức tạpO(1)
- thời gian hằng số, vì nó thường chỉ hoán đổi con trỏ của underlying container.
Ví dụ
#include <iostream>
#include <queue>
int main() {
std::queue<int> queue1;
queue1.push(10);
queue1.push(20);
std::queue<int> queue2;
queue2.push(30);
queue2.push(40);
queue2.push(50);
std::cout << "queue1 before swap:";
for (std::queue<int> temp = queue1; !temp.empty(); temp.pop()) {
std::cout << ' ' << temp.front();
}
std::cout << '\n'; // Output: queue1 before swap: 10 20
std::cout << "queue2 before swap:";
for (std::queue<int> temp = queue2; !temp.empty(); temp.pop()) {
std::cout << ' ' << temp.front();
}
std::cout << '\n'; // Output: queue2 before swap: 30 40 50
queue1.swap(queue2); // Hoán đổi nội dung của queue1 và queue2
std::cout << "queue1 after swap:";
for (std::queue<int> temp = queue1; !temp.empty(); temp.pop()) {
std::cout << ' ' << temp.front();
}
std::cout << '\n'; // Output: queue1 after swap: 30 40 50
std::cout << "queue2 after swap:";
for (std::queue<int> temp = queue2; !temp.empty(); temp.pop()) {
std::cout << ' ' << temp.front();
}
std::cout << '\n'; // Output: queue2 after swap: 10 20
return 0;
}