std::swap
From cppreference.com
(until C++11) (since C++11) |
||
template< class T >
void swap( T& a, T& b ); |
(1) | |
template< class T2, size_t N >
void swap( T2 (&a)[N], T2 (&b)[N]); |
(2) | (since C++11) |
Exchanges the given values.
1) Swaps the values
a
and b
. This overload does not participate in overload resolution unless std::is_move_constructible_v<T> && std::is_move_assignable_v<T> is true. (since C++17)
2) Swaps the arrays
a
and b
. In effect calls std::swap_ranges(a, a+N, b). This overload does not participate in overload resolution unless std::is_swappable_v<T> is true. (since C++17)
Contents |
[edit] Parameters
a, b | - | the values to be swapped |
Type requirements | ||
-
T must meet the requirements of MoveAssignable and MoveConstructible .
|
||
-
T2 must meet the requirements of Swappable .
|
[edit] Return value
(none)
[edit] Exceptions
1)
(none) | (until C++11) |
noexcept specification:
noexcept(
std::is_nothrow_move_constructible<T>::value && |
(since C++11) |
2)
noexcept specification:
noexcept(noexcept(swap(*a, *b)))
|
(until C++17) |
noexcept specification:
noexcept(std::is_nothrow_swappable_v<T>)
|
(since C++17) |
[edit] Complexity
1) Constant
2) Linear in N
[edit] Specializations
std::swap may be specialized in namespace std for user-defined types, but such specializations are not found by ADL (the namespace std is not the associated namespace for the user-defined type). The expected way to make a user-defined type swappable is to provide a non-member function swap in the same namespace as the type: see Swappable
for details.
The following overloads are already provided by the standard library:
(C++11)
|
specializes the std::swap algorithm (function template) |
(C++11)
|
specializes the std::swap algorithm (function template) |
(C++11)
|
specializes the std::swap algorithm (function template) |
(C++11)
|
specializes the std::swap algorithm (function template) |
(C++11)
|
specializes the std::swap algorithm (function template) |
(C++11)
|
specializes the std::swap algorithm (function template) |
specializes the std::swap algorithm (function template) |
|
(C++11)
|
specializes the std::swap algorithm (function template) |
specializes the std::swap algorithm (function template) |
|
(C++11)
|
specializes the std::swap algorithm (function template) |
specializes the std::swap algorithm (function template) |
|
specializes the std::swap algorithm (function template) |
|
specializes the std::swap algorithm (function template) |
|
specializes the std::swap algorithm (function template) |
|
specializes the std::swap algorithm (function template) |
|
specializes the std::swap algorithm (function template) |
|
(C++11)
|
specializes the std::swap algorithm (function template) |
specializes the std::swap algorithm (function template) |
|
(C++11)
|
specializes the std::swap algorithm (function template) |
specializes the std::swap algorithm (function template) |
|
specializes the std::swap algorithm (function template) |
|
specializes the std::swap algorithm (function template) |
|
specializes the std::swap algorithm (function template) |
|
(C++11)
|
specializes the std::swap() algorithm (function template) |
(C++11)
|
specializes the std::swap algorithm (function template) |
specializes the std::swap algorithm (function template) |
|
specializes the std::swap algorithm (function template) |
|
specializes the std::swap algorithm (function template) |
|
(C++11)
|
specializes the std::swap algorithm (function template) |
(C++11)
|
specializes the std::swap algorithm (function template) |
(C++11)
|
specializes the std::swap algorithm (function template) |
(C++11)
|
specializes the std::swap algorithm (function template) |
(C++11)
|
specializes the std::swap algorithm (function template) |
(C++11)
|
specializes the std::swap() algorithm (function template) |
(C++11)
|
specializes the std::swap algorithm (function template) |
(C++11)
|
specialization of std::swap for unique_lock (function template) |
(C++11)
|
specializes the std::swap algorithm (function template) |
(C++11)
|
specializes the std::swap algorithm (function template) |
(C++17)
|
specializes the std::swap algorithm (function) |
(C++17)
|
specializes the std::swap algorithm (function) |
swaps two paths (function) |
[edit] Example
Run this code
Output:
5 3 3 5
[edit] See also
swaps the elements pointed to by two iterators (function template) |
|
swaps two ranges of elements (function template) |