BohYoh.comトップページへ
C & C++ FAQ
目次

C C++ 同一型の二値を交換する方法を教えてください。


 いろいろな実現法があります。ここでは、一例を示します。
 
C
 まず、同一型の二値を交換する関数形式マクロを以下のように定義します。

#define swap(type, x, y) do {type t; t=x; x=y; y=t; } while (0)

 なお、呼び出す際は、以下のように、型名と二つの変数を渡します。

int a = 3, b = 5; double p = 0.5, q = 3.1; swap(int, x, y); swap(double, p, q);

 ここで示した関数形式マクロswapの定義の詳細については、FAQ『二つの変数値を交換する関数形式マクロはどう実現すればよいでしょうか。』で解説しています。

C++
 標準ライブラリで同一型の二値を交換する関数テンプレートswapが提供されていますので、この関数テンプレートを利用するとよいでしょう。以下に示すのが、swapの利用例です。

#include <algorithm> #include <utility> int a = 3, b = 5; double p = 0.5, q = 3.1; swap(x, y); swap(p, q);

 swapは、標準C++第1版(C++98)と第2版(C++03)では<algorithm>で提供されることになっていましたが、標準C++第3版(C++11)では、<utility>で提供されるように変更されています(上記のプログラム例のように、両方のヘッダをインクルードしておけば、すべての規格に対応するプログラムとなります)。

 なお、標準C++に非対応でswapが提供されていないコンパイラであれば、自分で定義するとよいでしょう。以下に示すのが、定義例です。

// swapの定義例 template<typename > void swap(T& a, T& b) { T tmp = a; a = b; b = tmp; }

 なお、型Tは、“コピー構築可能”でかつ“代入可能な”型でなければなりません(標準ライブラリのswapも、同じ仕様です)。


■ 根拠 ■
標準C++ §25.2.2 Swap
標準C++ 2nd §25.2.2 Swap
標準C++ 3rd §20.2.2 swap

戻る

BohYoh.comロゴ