Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++에서 크기가 같은 두 배열을 빠르게 교환하는 방법 – std::swap() 완벽 가이드

C++ 프로그래밍에서 배열을 다룰 때, 크기가 같은 두 배열의 내용을 서로 맞바꿔야 하는 경우가 종종 발생합니다. 이때 각 요소를 하나씩 반복문으로 복사하는 방식은 코드도 길어지고 성능 면에서도 비효율적입니다.

다행히 C++ 표준 라이브러리는 이 문제를 아주 간단하게 해결해 주는 std::swap() 함수를 제공합니다. 이 함수를 사용하면 단 한 줄의 코드로 두 배열 전체를 빠르고 안전하게 교환할 수 있습니다.

std::swap()의 동작 원리

std::swap()은 <utility> 헤더에 정의되어 있으며, 두 객체(배열 포함)의 내용을 서로 교환합니다. 내부적으로는 요소별 복사 대신 효율적인 교환 방식을 사용하므로, 직접 반복문을 작성하는 것보다 간결하고 오류 가능성도 적습니다.

예제 코드

아래 예제는 int형 배열 두 개를 선언한 뒤, swap() 함수로 두 배열의 내용을 교환하고 결과를 출력합니다.

#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,

핵심 정리

  • 간결함: swap(a, b); 한 줄이면 충분하며, 별도의 임시 배열이나 반복문이 필요 없습니다.
  • 안전성: 표준 라이브러리 함수이므로 직접 구현 시 발생할 수 있는 인덱스 오류 등을 피할 수 있습니다.
  • 성능: 컴파일러 최적화에 따라 매우 빠르게 동작하며, C++11 이후에는 이동 의미론(move semantics)을 활용한 효율적인 교환이 가능합니다.

단, std::swap()으로 배열 전체를 교환하려면 두 배열의 크기와 타입이 동일해야 합니다. 크기가 다른 배열에는 적용할 수 없으므로, 그런 경우에는 std::vector와 같은 동적 컨테이너를 사용하는 것이 좋습니다.