Namespaces
Variants
Views
Actions

std::swap

From cppreference.com
< cpp‎ | algorithm
Revision as of 05:14, 3 August 2012 by Cubbi (Talk | contribs)

 
 
Algorithm library
Constrained algorithms and algorithms on ranges (C++20)
Constrained algorithms, e.g. ranges::copy, ranges::sort, ...
Execution policies (C++17)
Non-modifying sequence operations
Batch operations
(C++17)
Search operations
(C++11)                (C++11)(C++11)

Modifying sequence operations
Copy operations
(C++11)
(C++11)
Swap operations
swap
Transformation operations
Generation operations
Removing operations
Order-changing operations
(until C++17)(C++11)
(C++20)(C++20)
Sampling operations
(C++17)

Sorting and related operations
Partitioning operations
Sorting operations
Binary search operations
(on partitioned ranges)
Set operations (on sorted ranges)
Merge operations (on sorted ranges)
Heap operations
Minimum/maximum operations
(C++11)
(C++17)
Lexicographical comparison operations
Permutation operations
C library
Numeric operations
Operations on uninitialized memory
 

Template:ddcl list begin <tr class="t-dsc-header">

<td>
Defined in header <algorithm>
Defined in header <utility>
</td>

<td></td>

<td>
(until C++11)
(since C++11)
</td>

</tr> <tr class="t-dcl ">

<td >
template< class T >
void swap( T& a, T& b );
</td>

<td > (1) </td> <td class="t-dcl-nopad"> </td> </tr> <tr class="t-dcl ">

<td >
template< class T2, size_t N >
void swap( T2 (&a)[N], T2 (&b)[N]);
</td>

<td > (2) </td> <td > (since C++11) </td> </tr> Template:ddcl list end

Exchanges the given values.

1) Swaps the values a and b.

2) Swaps the arrays a and b. In effect calls std::swap_ranges(a, a+N, b).

Contents

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.

Return value

(none)

Exceptions

1)
noexcept specification:  
noexcept(noexcept(

    std::is_nothrow_move_constructible<T>::value &&
    std::is_nothrow_move_assignable<T>::value

))
2)
noexcept specification:  
noexcept(noexcept(swap(*a, *b)))

Complexity

1) Constant

2) Linear in N

Specializations

Both custom specializations and overloads of the std::swap algorithm are allowed, but the overloads are generally preferred since specializations of a function template aren't allowed for template classes. Library functions always use the user-provided overloads when swapping, if they are found by argument-dependent lookup (as per Template:concept concept).

The following overloads are already provided by the standard library:

Template:cpp/memory/shared ptr/dcl list swap2Template:cpp/memory/weak ptr/dcl list swap2Template:cpp/memory/unique ptr/dcl list swap2Template:cpp/string/basic string/dcl list swap2Template:cpp/container/dcl list swap2Template:cpp/container/dcl list swap2Template:cpp/container/dcl list swap2Template:cpp/container/dcl list swap2Template:cpp/container/dcl list swap2Template:cpp/container/dcl list swap2Template:cpp/container/dcl list swap2Template:cpp/container/dcl list swap2Template:cpp/container/dcl list swap2Template:cpp/container/dcl list swap2Template:cpp/container/dcl list swap2Template:cpp/container/dcl list swap2Template:cpp/container/dcl list swap2Template:cpp/container/dcl list swap2Template:cpp/container/dcl list swap2Template:cpp/container/dcl list swap2Template:cpp/io/basic fstream/dcl list swap2Template:cpp/io/basic fstream/dcl list swap2Template:cpp/io/basic fstream/dcl list swap2
specializes the std::swap algorithm
(function template) [edit]
specializes the std::swap algorithm
(function template) [edit]
specializes the std::swap algorithm
(function template) [edit]
specializes the Template:cpp/ltf algorithm
(function template)
specializes the Template:cpp/ltf algorithm
(function template)
specializes the Template:cpp/ltf algorithm
(function template)
specializes the Template:cpp/ltf algorithm
(function template)
specializes the Template:cpp/ltf algorithm
(function template)
specializes the Template:cpp/ltf algorithm
(function template)
specializes the Template:cpp/ltf algorithm
(function template)
specializes the Template:cpp/ltf algorithm
(function template)
({{{1}}})
specializes the std::swap algorithm
(function) [edit]
specializes the Template:cpp/ltf algorithm
(function template)
specializes the Template:cpp/ltf algorithm
(function template)
specializes the Template:cpp/ltf algorithm
(function template)

Example

See also

Template:cpp/algorithm/dcl list iter swapTemplate:cpp/algorithm/dcl list swap ranges