From cppreference.com
voidswap(array&other)noexcept(/* see below */);(since C++11)
(constexpr since C++20)Exchanges the contents of the container with those of other. Does not cause iterators and references to associate with the other container.
Parameters
other - container to exchange the contents with Return value
(none)
Exceptions
specification:
noexcept(noexcept(swap(std::declval<T&>(),std::declval<T&>())))In the expression above, the identifier swap is looked up in the same manner as the one used by the C++17
trait.
(until C++17)
specification:
noexcept(std::is_nothrow_swappable_v<T>)(since C++17) For zero-sized arrays,
Complexity
Linear in size of the container.
Example
Run this code
#include<array>#include<iostream>template<classOs,classV>Os&operator<<(Os&os,constV&v){os<<'{';for(autoi:v)os<<' '<<i;returnos<<" } ";}intmain(){std::array<int,3>a1{1,2,3},a2{4,5,6};autoit1=a1.begin();autoit2=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].}Output:
{ 1 2 3 } { 4 5 6 } 1 4 2 5 { 4 5 6 } { 1 2 3 } 4 1 5 2 Defect reports
The following behavior-changing defect reports were applied retroactively to previously published C++ standards.
DR Applied to Behavior as published Correct behavior
C++11 the noexcept specification is ill-formed made to work See also
:
Pages using deprecated source tags