Namespaces
Variants
Views
Actions

Difference between revisions of "cpp/algorithm/swap"

From cppreference.com
< cpp‎ | algorithm
m (r2.7.3) (Robot: Adding de, fr, it, ja, pt, zh)
Line 94: Line 94:
 
  | <!-- should demo proper use of swap with generic types, as in void swap(T& other) {using std::swap; swap(member, other.member);} , not just trivialities -->
 
  | <!-- should demo proper use of swap with generic types, as in void swap(T& other) {using std::swap; swap(member, other.member);} , not just trivialities -->
 
  | code=
 
  | code=
 +
#include <algorithm>
 +
#include <iostream>
 +
 +
int main()
 +
{
 +
  int a = 5, b = 3;
 +
 +
  //before
 +
  std::cout << a << ' ' << b << std::endl;
 +
 +
  std::swap(a,b);
 +
 +
  //after
 +
  std::cout << a << ' ' << b << std::endl;
 +
 +
}
 
  | output=
 
  | output=
 +
5 3
 +
3 5
 
}}
 
}}
  

Revision as of 07:50, 10 December 2012

 
 
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

#include <algorithm>
#include <iostream>
 
int main()
{
   int a = 5, b = 3;
 
   //before
   std::cout << a << ' ' << b << std::endl;
 
   std::swap(a,b);
 
   //after
   std::cout << a << ' ' << b << std::endl;
 
}

Output:

5 3
3 5

See also

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