std::forward_list::swap
#include <forward_list>
void swap(forward_list& other);
Hoán đổi nội dung của hai forward_list với nhau.
Tham số
other
- Tham chiếu đến forward_list khác mà bạn muốn hoán đổi nội dung.
other
phải là một forward_list có cùng kiểu phần tử với forward_list 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 forward_list, bao gồm tất cả các phần tử. - Hiệu quả:
swap()
thường được thực hiện với độ phức tạpO(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 forward_list, thay vì sao chép từng phần tử. - Không làm thay đổi iterator:
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 forward_list. - 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 forward_list này sẽ trỏ đến các phần tử của forward_list kia. - 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 forward_list. 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 <forward_list>
int main() {
std::forward_list<int> list1 = {1, 2, 3};
std::forward_list<int> list2 = {4, 5, 6, 7};
std::cout << "list1 before swap:";
for (int x : list1) std::cout << ' ' << x;
std::cout << '\n';
std::cout << "list2 before swap:";
for (int x : list2) std::cout << ' ' << x;
std::cout << '\n';
list1.swap(list2); // Hoán đổi nội dung của list1 và list2
std::cout << "list1 after swap:";
for (int x : list1) std::cout << ' ' << x;
std::cout << '\n';
std::cout << "list2 after swap:";
for (int x : list2) std::cout << ' ' << x;
std::cout << '\n';
return 0;
}