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

std::deque::swap

#include <deque>

void swap(deque& other);

Hoán đổi nội dung của hai deque với nhau.

Tham số

other

  • Tham chiếu đến deque khác mà bạn muốn hoán đổi nội dung. other phải là một deque có cùng kiểu phần tử với deque hiện tại.

Giá trị trả về

Không có giá trị trả về

Đặc điểm

  1. swap() hoán đổi toàn bộ nội dung của hai deque, bao gồm tất cả các phần tử và kích thước của chúng.
  2. swap() thường được thực hiện với độ phức tạp O(1) - thời gian hằng số. Việc hoán đổi được thực hiện bằng cách trao đổi các con trỏ quản lý dữ liệu bên trong của hai deque, thay vì sao chép từng phần tử.
  3. swap() không làm thay đổi (invalidate) các iterator, tham chiếu, hoặc con trỏ trỏ đến các phần tử của cả hai deque ngoại trừ iterator end() sẽ bị thay đổi.
  4. 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 deque này sẽ trỏ đến các phần tử của deque kia.
  5. Phiên bản non-member 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. Phiên bản thành viên swap không được chỉ định noexcept trong tiêu chuẩn, nhưng thường các triển khai cũng cung cấp noexcept cho nó.
  6. 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 deque. 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.

Ví dụ

#include <iostream>
#include <deque>

int main() {
std::deque<int> deque1 = {1, 2, 3};
std::deque<int> deque2 = {4, 5, 6, 7};

std::cout << "deque1 before swap:";
for (int x : deque1) std::cout << ' ' << x;
std::cout << '\n';

std::cout << "deque2 before swap:";
for (int x : deque2) std::cout << ' ' << x;
std::cout << '\n';

deque1.swap(deque2); // Hoán đổi nội dung của deque1 và deque2

std::cout << "deque1 after swap:";
for (int x : deque1) std::cout << ' ' << x;
std::cout << '\n';

std::cout << "deque2 after swap:";
for (int x : deque2) std::cout << ' ' << x;
std::cout << '\n';

return 0;
}