##### cppreference.com

##### Search

Create account

##### Namespaces

- Page
- Discussion

##### Variants

##### Views

- View
- Edit
- History

##### Actions

# std::swap

From cppreference.com
< cpp‎ | algorithm

Defined in header `<algorithm>` Defined in header `<utility>` |  | (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`.

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

### [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)
`noexcept` specification: (since C++11)
noexcept(noexcept(

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

))
2)
`noexcept` specification: (since C++11)
noexcept(noexcept(swap(*a, *b)))

### [edit] Complexity

1) Constant

2) Linear in N

### [edit] 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 `Swappable` concept).

The following overloads are already provided by the standard library:

std::swap(std::pair) (C++11) | specializes the std::swap algorithm (function template) [edit]
std::swap(std::tuple) (C++11) | specializes the std::swap algorithm (function template) [edit]
std::swap(std::shared_ptr) (C++11) | specializes the std::swap algorithm (function template) [edit]
std::swap(std::weak_ptr) (C++11) | specializes the std::swap algorithm (function template) [edit]
std::swap(std::unique_ptr) (C++11) | specializes the std::swap algorithm (function template) [edit]
std::swap(std::function) (C++11) | specializes the std::swap algorithm (function template) [edit]
std::swap(std::basic_string) | specializes the std::swap algorithm (function template) [edit]
std::swap(std::array) | specializes the std::swap algorithm (function template) [edit]
std::swap(std::deque) | specializes the std::swap algorithm (function template) [edit]
std::swap(std::forward_list) | specializes the std::swap algorithm (function template) [edit]
std::swap(std::list) | specializes the std::swap algorithm (function template) [edit]
std::swap(std::vector) | specializes the std::swap algorithm (function template) [edit]
std::swap(std::map) | specializes the std::swap algorithm (function template) [edit]
std::swap(std::multimap) | specializes the std::swap algorithm (function template) [edit]
std::swap(std::set) | specializes the std::swap algorithm (function template) [edit]
std::swap(std::multiset) | specializes the std::swap algorithm (function template) [edit]
std::swap(std::unordered_map) | specializes the std::swap algorithm (function template) [edit]
std::swap(std::unordered_multimap) | specializes the std::swap algorithm (function template) [edit]
std::swap(std::unordered_set) | specializes the std::swap algorithm (function template) [edit]
std::swap(std::unordered_multiset) | specializes the std::swap algorithm (function template) [edit]
std::swap(std::queue) | specializes the std::swap algorithm (function template) [edit]
std::swap(std::priority_queue) | specializes the std::swap algorithm (function template) [edit]
std::swap(std::stack) | specializes the std::swap algorithm (function template) [edit]
std::swap(std::valarray) (C++11) | specializes the std::swap() algorithm (function template) [edit]
std::swap(std::basic_stringbuf) (C++11) | specializes the std::swap algorithm (function template) [edit]
std::swap(std::basic_istringstream) (C++11) | specializes the std::swap algorithm (function template) [edit]
std::swap(std::basic_ostringstream) (C++11) | specializes the std::swap algorithm (function template) [edit]
std::swap(std::basic_stringstream) (C++11) | specializes the std::swap algorithm (function template) [edit]
std::swap(std::basic_filebuf) (C++11) | specializes the std::swap algorithm (function template) [edit]
std::swap(std::basic_ifstream) (C++11) | specializes the std::swap algorithm (function template) [edit]
std::swap(std::basic_ofstream) (C++11) | specializes the std::swap algorithm (function template) [edit]
std::swap(std::basic_fstream) (C++11) | specializes the std::swap algorithm (function template) [edit]
std::swap(std::basic_regex) (C++11) | specializes the std::swap algorithm (function template) [edit]
std::swap(std::match_results) (C++11) | specializes the `std::swap()` algorithm (function template) [edit]
std::swap(std::thread) (C++11) | specializes the std::swap algorithm (function template) [edit]
std::swap(std::unique_lock) (C++11) | specialization of std::swap for `unique_lock` (function template) [edit]
std::swap(std::promise) (C++11) | specializes the std::swap algorithm (function template) [edit]
std::swap(std::packaged_task) (C++11) | specializes the std::swap algorithm (function template) [edit]

### [edit] Example

Run this code

    #include <algorithm>
    #include <iostream>

    int main()
    {
       int a = 5, b = 3;

       // before
       std::cout << a << ' ' << b << '\n';

       std::swap(a,b);

       // after
       std::cout << a << ' ' << b << '\n';
    }

Output:

    5 3
    3 5

### [edit] See also

iter_swap | swaps the elements pointed to by two iterators (function template) [edit]
swap_ranges | swaps two ranges of elements (function template) [edit]

Retrieved from "http://en.cppreference.com/mwiki/index.php?title=cpp/algorithm/swap&oldid=62654"