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

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

  1. 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ộ.
  2. 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).
  3. 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.
  4. Trong C++11 trở đi, swap() được chỉ định là noexcept (với allocator mặc định), nghĩa là nó không ném ra ngoại lệ.
  5. Ngoài hàm thành viên swap(), còn có một hàm std::swap() non-member (trong <algorithm><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ên swap() bên trong.
  6. 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;
}