array::swap

array::swap (내용 교환하기)

std::array의 내용을 서로 바꾸는 멤버 함수예요. 크기가 고정이라 같은 N의 배열끼리만 교환 가능해요. C++11부터 있어요.

출처: cppreference

본문

swap()은 컨테이너의 내용을 other와 교환해요. 교환 후에도 반복자와 참조가 다른 컨테이너에 묶이도록 만들지는 않아요.

void swap( array& other ) noexcept(/* see below */);
  • 매개변수 other: 내용을 교환할 컨테이너.
  • 반환 값: 없음.
  • 복잡도: 컨테이너 크기에 선형이에요.

noexcept 조건은 T의 스왑 가능성에 따라 결정돼요. C++17 이전에는 noexcept(noexcept(swap(std::declval<T&>(), ...))) 형태로, C++17부터는 noexcept(std::is_nothrow_swappable_v<T>)로 단순해졌어요. 0-크기 배열은 항상 noexcept예요.

std::array<int, 3> a1{1, 2, 3};
std::array<int, 3> a2{4, 5, 6};
a1.swap(a2);
// a1 == {4,5,6}, a2 == {1,2,3}

자유 함수 std::swap(a1, a2)도 내부적으로 멤버 swap을 호출해요. std::vector와 달리 heap 할당이 없으므로 swap 비용은 요소 개수에 비례하는 복사로만 이뤄져요. 그런데 이렇게 복사 기반이라 요소 타입이 무거우면 비용이 커질 수 있다는 점은 감안해야 해요.

더 알아보기 (Learn more)

cppreference