std::string::swap
#include <string>
void swap( basic_string& other ); //(until C++20)
void swap( basic_string& other ) noexcept(/* see below */); //(since C++17)
Hoán đổi nội dung của hai chuỗi std::string một cách hiệu quả.
Tham số
other
- Tham chiếu đến một đối tượng std::string (hoặc std::basic_string cùng kiểu) khác mà bạn muốn hoán đổi nội dung với chuỗi hiện tại.
Giá trị trả về
Không có giá trị trả về
Đặc điểm
swap()
hoán đổi nội dung của hai chuỗi, bao gồm cả size, capacity, và con trỏ dữ liệu nội bộ.- Sau khi gọi
swap()
, các iterator, con trỏ và tham chiếu trỏ đến các phần tử của chuỗi ban đầu sẽ trỏ đến các phần tử của chuỗi kia (vì nội dung đã bị hoán đổi). swap()
có độ phức tạp thời gian là hằng số (O(1)
) vì nó chỉ hoán đổi các con trỏ và thông tin quản lý nội bộ, không sao chép toàn bộ dữ liệu chuỗi.- Trong C++11 trở đi,
swap()
được chỉ định lànoexcept
(vớiallocator
mặc định), nghĩa là nó không ném ra ngoại lệ. - Ngoài hàm thành viên
swap()
, còn có một hàmstd::swap()
non-member (trong<algorithm>
và<utility>
) cũng có thể được sử dụng để hoán đổi hai chuỗi std::string. Hàm non-member này sẽ gọi hàm thành viênswap()
bên trong. swap()
thường được sử dụng để:- Hoán đổi nội dung của hai chuỗi một cách nhanh chóng và hiệu quả.
- Triển khai các thuật toán cần hoán đổi chuỗi (ví dụ: một số thuật toán sắp xếp).
- Tránh việc sao chép dữ liệu không cần thiết khi bạn muốn chuyển quyền sở hữu chuỗi.
Ví dụ
#include <iostream>
#include <string>
int main() {
std::string str1 = "Hello";
std::string str2 = "World";
std::cout << "Before swap:\n";
std::cout << "str1: " << str1 << std::endl;
std::cout << "str2: " << str2 << std::endl;
str1.swap(str2); // Hoán đổi nội dung của str1 và str2
std::cout << "\nAfter swap:\n";
std::cout << "str1: " << str1 << std::endl;
std::cout << "str2: " << str2 << std::endl;
return 0;
}