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

< cpp‎ | container‎ | array

void swap( array& other ) noexcept(/* see below */); |  | (C++11 起) (C++20 前)
constexpr void swap( array& other ) noexcept(/* see below */); |  | (C++20 起)

将容器内容与 `other` 的内容交换。不导致迭代器和引用关联到别的容器。

### 参数

other | - | 要与之交换内容的 `array`

### 返回值

（无）

### 异常

`noexcept` 说明： noexcept(noexcept(swap(std::declval<T&>(), std::declval<T&>()))) 在以上表达式中，按照同 C++17 std::is_nothrow_swappable 特性所用的行为查找标识符 `swap` 。 | (C++17 前)
`noexcept` 说明： noexcept(std::is_nothrow_swappable_v<T>) | (C++17 起)

对于零长 `array` ，
`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';

        // 注意交换后迭代器与引用保持与原 array 关联，
        // 例如 `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(std::array) (C++11) | 特化 std::swap 算法 (函数模板)