Namespaces
Variants

std::array<T,N>:: swap

From cppreference.net
void swap ( array & other ) noexcept ( /* see below */ ) ;
(C++11 이후)
(C++20 이후 constexpr)

컨테이너의 내용을 other 와 교환합니다. 반복자와 참조가 다른 컨테이너와 연관되지 않도록 합니다.

목차

매개변수

other - 내용을 교환할 대상 컨테이너

반환값

(없음)

예외

noexcept 명세:
noexcept ( noexcept ( swap ( std:: declval < T & > ( ) , std:: declval < T & > ( ) ) ) )

위 표현식에서 swap 식별자는 C++17의 std::is_nothrow_swappable 특성(trait)이 사용하는 방식과 동일한 방식으로 조회됩니다.

(C++17 이전)
(C++17 이후)
For zero-sized arrays,
noexcept 명세:
noexcept

복잡도

컨테이너 크기에 선형적으로 비례합니다.

예제

#include <array>
#include <iostream>
template<class Os, class V> Os& operator<<(Os& os, const V& v)
{
    os << '{';
    for (auto i : v)
        os << ' ' << i;
    return os << " } ";
}
int main()
{
    std::array<int, 3> a1{1, 2, 3}, a2{4, 5, 6};
    auto it1 = a1.begin();
    auto it2 = a2.begin();
    int& ref1 = a1[1];
    int& ref2 = a2[1];
    std::cout << a1 << a2 << *it1 << ' ' << *it2 << ' ' << ref1 << ' ' << ref2 << '\n';
    a1.swap(a2);
    std::cout << a1 << a2 << *it1 << ' ' << *it2 << ' ' << ref1 << ' ' << ref2 << '\n';
    // swap 이후에도 반복자와 참조는 원래의 배열과 계속 연관되어 있음에 주목
    // 예: `it1`은 여전히 a1[0] 요소를 가리키고, `ref1`은 여전히 a1[1]을 참조함
}

출력:

{ 1 2 3 } { 4 5 6 } 1 4 2 5
{ 4 5 6 } { 1 2 3 } 4 1 5 2

결함 보고서

다음의 동작 변경 결함 보고서들은 이전에 발표된 C++ 표준에 소급 적용되었습니다.

DR 적용 대상 게시된 동작 올바른 동작
LWG 2456 C++11 noexcept 명세가 올바르지 않은 형태임 작동하도록 수정됨

참고 항목

std::swap 알고리즘을 특수화함
(함수 템플릿)