Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

การสลับอาร์เรย์สองอาร์เรย์ขนาดเท่ากันอย่างรวดเร็วใน C++

การสลับอาร์เรย์สองอาร์เรย์ขนาดเท่ากันอย่างรวดเร็ว (Quick Swap Two Arrays of Same Size) ใน C++

ใช้ std::swap จาก <utility> สลับอาร์เรย์ C-style array ขนาดคงที่ได้โดยตรง (C++11 ขึ้นไป)

ตัวอย่าง

#include <iostream>
#include <utility>
using namespace std;

int main() {
    int a[] = {1, 2, 3, 4};
    int b[] = {5, 6, 7, 8};
    int n = sizeof(a)/sizeof(a[0]);
    
    swap(a, b);  // สลับทั้งอาร์เรย์
    
    cout << "a[] = ";
    for (int i = 0; i < n; i++) cout << a[i] << ", ";
    cout << "\nb[] = ";
    for (int i = 0; i < n; i++) cout << b[i] << ", ";
    return 0;
}

ผลลัพธ์

a[] = 5, 6, 7, 8,
b[] = 1, 2, 3, 4,

คำอธิบาย

  • std::swap มี overload สำหรับ array types (C++11): template<class T, size_t N> void swap(T (&a)[N], T (&b)[N]) noexcept
  • สลับแบบ element-wise ทั้งอาร์เรย์ (ไม่ใช่แค่สลับ pointer)
  • ต้องเป็นอาร์เรย์ขนาดเท่ากันและ type เหมือนกัน
  • Noexcept ถ้า element type เป็น noexcept swappable

กรณีอาร์เรย์ขนาดไม่เท่าหรือ dynamic array

  • ใช้ std::vector แล้ว swap(v1, v2) (O(1) แค่สลับ internal pointers)
  • ใช้ std::swap_ranges สำหรับ pointer/size แยกต่างหาก

ประสิทธิภาพ

  • C-style array: O(n) element swaps
  • std::vector: O(1) pointer swaps (เร็วมาก)