命名空间
变体
操作

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

来自 cppreference.com
< cpp‎ | container‎ | array
 
 
 
 
void swap( array& other ) noexcept(/* 见下文 */);
(自 C++11 起)
(自 C++20 起为 constexpr)

将容器的内容与 other 的内容交换。不会导致迭代器和引用与另一个容器相关联。

内容

[编辑] 参数

other - 要交换内容的容器

[编辑] 返回值

(无)

[编辑] 异常

noexcept 规范:  
noexcept(noexcept(swap(std::declval<T&>(), std::declval<T&>())))

在上面的表达式中,标识符 swap 的查找方式与 C++17 std::is_nothrow_swappable 特性所使用的查找方式相同。

(直到 C++17)
noexcept 规范:  
(自 C++17 起)
对于零大小的数组,
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';
 
    // Note that after swap iterators and references stay associated with their original
    // array, e.g. `it1` still points to element a1[0], `ref1` still refers to 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 算法
(函数模板) [编辑]