std::swap - cppreference.com
提供: cppreference.com
<tbody> </tbody> <tbody class="t-dcl-rev t-dcl-rev-num "> </tbody><tbody> </tbody> <tbody class="t-dcl-rev t-dcl-rev-num "> </tbody><tbody> </tbody>
| ヘッダ |
(C++11未満) |
|
| ヘッダ |
(C++11以上) |
|
| (1) | ||
|
|
(C++11未満) | |
|
|
(C++11以上) (C++20未満) |
|
|
|
(C++20以上) | |
| (2) | ||
|
|
(C++11以上) (C++20未満) |
|
|
|
(C++20以上) | |
指定された値を入れ替えます。
1) 値 a と b を入れ替えます。 このオーバーロードは std::is_move_constructible_v<T> && std::is_move_assignable_v<T> が true でなければオーバーロード解決に参加しません。 (C++17以上)
2) 配列 a と b を入れ替えます。 実質的に std::swap_ranges(a, a+N, b) です。 このオーバーロードは std::is_swappable_v<T2> が true でなければオーバーロード解決に参加しません。 (C++17以上)
引数
| a, b | - | 入れ替えられる値 |
| 型の要件 | ||
-T は MoveAssignable および MoveConstructible の要件を満たさなければなりません。
| ||
-T2 は Swappable の要件を満たさなければなりません。
| ||
戻り値
(なし)
例外
1)
|
(なし) |
(C++11未満) |
|
noexcept
指定:
|
(C++11以上) |
2)
例外仕様の中の識別子 swap の名前探索は、通常の名前探索ルールによって発見されるものに加えて、この関数が発見されます。 C++17 の std::is_nothrow_swappable と同等の例外仕様になります。
|
(C++17未満) |
| (C++17以上) |
計算量
1) 定数時間
2) N の線形時間
特殊化
|
|
(C++20未満) |
プログラム定義型を swap 可能にする期待されている方法は、その型と同じ名前空間で非メンバ関数 swap を提供することです。 詳細は Swappable を参照してください。
以下のオーバーロードが標準ライブラリによってすでに提供されています。
(C++11) |
std::swap アルゴリズムの特殊化 (関数テンプレート) [edit] |
(C++11) |
std::swap アルゴリズムの特殊化 (関数テンプレート) [edit] |
(C++11) |
std::swap アルゴリズムの特殊化 (関数テンプレート) [edit] |
(C++11) |
std::swap アルゴリズムの特殊化 (関数テンプレート) [edit] |
(C++11) |
std::swap アルゴリズムの特殊化 (関数テンプレート) [edit] |
(C++11) |
std::swap アルゴリズムの特殊化 (関数テンプレート) [edit] |
| std::swap アルゴリズムの特殊化 (関数テンプレート) [edit] | |
(C++11) |
std::swap アルゴリズムの特殊化 (関数テンプレート) [edit] |
| std::swap アルゴリズムの特殊化 (関数テンプレート) [edit] | |
(C++11) |
std::swap アルゴリズムの特殊化 (関数テンプレート) [edit] |
| std::swap アルゴリズムの特殊化 (関数テンプレート) [edit] | |
| std::swap アルゴリズムの特殊化 (関数テンプレート) [edit] | |
| std::swap アルゴリズムの特殊化 (関数テンプレート) [edit] | |
| std::swap アルゴリズムの特殊化 (関数テンプレート) [edit] | |
| std::swap アルゴリズムの特殊化 (関数テンプレート) [edit] | |
| std::swap アルゴリズムの特殊化 (関数テンプレート) [edit] | |
| std::swap アルゴリズムの特殊化 (関数テンプレート) [edit] | |
| std::swap アルゴリズムの特殊化 (関数テンプレート) [edit] | |
| std::swap アルゴリズムの特殊化 (関数テンプレート) [edit] | |
| std::swap アルゴリズムの特殊化 (関数テンプレート) [edit] | |
| std::swap アルゴリズムの特殊化 (関数テンプレート) [edit] | |
| std::swap アルゴリズムの特殊化 (関数テンプレート) [edit] | |
| std::swap アルゴリズムの特殊化 (関数テンプレート) [edit] | |
(C++11) |
std::swap アルゴリズムの特殊化 (関数テンプレート) [edit] |
| std::swap アルゴリズムの特殊化 (関数テンプレート) [edit] | |
| std::swap アルゴリズムの特殊化 (関数テンプレート) [edit] | |
| std::swap アルゴリズムの特殊化 (関数テンプレート) [edit] | |
| std::swap アルゴリズムの特殊化 (関数テンプレート) [edit] | |
| std::swap アルゴリズムの特殊化 (関数テンプレート) [edit] | |
| std::swap アルゴリズムの特殊化 (関数テンプレート) [edit] | |
| std::swap アルゴリズムの特殊化 (関数テンプレート) [edit] | |
| std::swap アルゴリズムの特殊化 (関数テンプレート) [edit] | |
| std::swap アルゴリズムの特殊化 (関数テンプレート) [edit] | |
(C++11) |
std::swap アルゴリズムの特殊化 (関数テンプレート) [edit] |
| std::swap アルゴリズムの特殊化 (関数テンプレート) [edit] | |
(C++11) |
std::swap アルゴリズムの特殊化 (関数) [edit] |
(C++11) |
unique_lock に対する std::swap の特殊化 (関数テンプレート) [edit] |
(C++11) |
std::swap アルゴリズムの特殊化 (関数テンプレート) [edit] |
| std::swap アルゴリズムの特殊化 (関数テンプレート) [edit] | |
(C++17) |
std::swap アルゴリズムの特殊化 (関数) [edit] |
(C++17) |
std::swap アルゴリズムの特殊化 (関数) [edit] |
(C++17) |
std::swap アルゴリズムの特殊化 (関数) [edit] |
| 2つのパスを入れ替えます (関数) [edit] |
例
#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'; }
出力:
不具合報告
以下の動作変更欠陥報告は以前に発行された C++ 標準に遡って適用されました。
| DR | 適用先 | 発行時の動作 | 正しい動作 |
|---|---|---|---|
| LWG 2554 | C++11 | swapping multi-dimensional arrays can never be noexcept due to name lookup problems
|
made to work |