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

std::vector::swap

#include <vector>

void swap(vector& other) noexcept;

Hoán đổi nội dung của hai vector.

Tham số

other

  • Một đối tượng std::vector cùng kiểu với vector hiện tại.

Giá trị trả về

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

Đặc điểm

  1. Thực hiện bằng cách hoán đổi các con trỏ nội bộ, do đó, thời gian thực hiện là O(1).
  2. Không làm thay đổi kích thước hoặc phân bổ bộ nhớ mới, chỉ thay đổi nội dung dữ liệu.
  3. Không cần sao chép hoặc cấp phát lại dữ liệu.
  4. Sau khi gọi, hai vector sẽ tráo đổi toàn bộ dữ liệu, bao gồm cả:
    • Các phần tử.
    • Capacity (khả năng lưu trữ hiện tại của vector).
    • Các iterator trỏ tới các phần tử của hai vector trước khi hoán đổi sẽ trở thành iterator của vector kia.
  5. Có thể sử dụng hàm toàn cục std::swap để hoán đổi hai vector, nhưng cần include thư viện:
    • Trước C++17: std::swap được định nghĩa trong <algorithm>
    • Từ C++17 trở đi: std::swap được chuyển sang <utility>

Ví dụ

#include <iostream>
#include <vector>

int main() {
std::vector<int> vec1 = {1, 2, 3};
std::vector<int> vec2 = {4, 5, 6};

vec1.swap(vec2);

std::cout << "vec1: ";
for (int num : vec1) {
std::cout << num << " "; // Kết quả: 4 5 6
}
std::cout << std::endl;

std::cout << "vec2: ";
for (int num : vec2) {
std::cout << num << " "; // Kết quả: 1 2 3
}
std::cout << std::endl;

return 0;
}

Sử dụng hàm toàn cục std::swap để hoán đổi hai vector

#include <iostream>
#include <vector>
#include <algorithm> // Để sử dụng std::swap

int main() {
std::vector<int> vec1 = {1, 2, 3};
std::vector<int> vec2 = {4, 5, 6};

std::swap(vec1, vec2);

std::cout << "vec1: ";
for (int num : vec1) {
std::cout << num << " "; // Kết quả: 4 5 6
}
std::cout << std::endl;

std::cout << "vec2: ";
for (int num : vec2) {
std::cout << num << " "; // Kết quả: 1 2 3
}
std::cout << std::endl;

return 0;
}