การสลับอาร์เรย์สองอาร์เรย์ขนาดเท่ากันอย่างรวดเร็ว (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 (เร็วมาก)