C & C++ FAQ
|
C | C++ | 同一型の二値を交換する方法を教えてください。 |
C |
なお、呼び出す際は、以下のように、型名と二つの変数を渡します。#define swap(type, x, y) do {type t; t=x; x=y; y=t; } while (0)
ここで示した関数形式マクロswapの定義の詳細については、FAQ『二つの変数値を交換する関数形式マクロはどう実現すればよいでしょうか。』で解説しています。int a = 3, b = 5; double p = 0.5, q = 3.1; swap(int, x, y); swap(double, p, q);
C++ |
swapは、標準C++第1版(C++98)と第2版(C++03)では<algorithm>で提供されることになっていましたが、標準C++第3版(C++11)では、<utility>で提供されるように変更されています(上記のプログラム例のように、両方のヘッダをインクルードしておけば、すべての規格に対応するプログラムとなります)。#include <algorithm> #include <utility> int a = 3, b = 5; double p = 0.5, q = 3.1; swap(x, y); swap(p, q);
なお、型Tは、“コピー構築可能”でかつ“代入可能な”型でなければなりません(標準ライブラリのswapも、同じ仕様です)。// swapの定義例 template<typename > void swap(T& a, T& b) { T tmp = a; a = b; b = tmp; }
標準C++ | §25.2.2 | Swap |
標準C++ 2nd | §25.2.2 | Swap |
標準C++ 3rd | §20.2.2 | swap |