構文:
テンプレート < クラスT > 空所 スワップ ( T & variable_1 、 T & variable_2 ) ;どちらも値を格納する最初の変数と 2 番目の変数の両方の値が交換されます。関数は変数の値を切り替えるだけです。それには出力がありません。」
C++ での swap() 関数の動作
swap 関数は、次の 3 行を使用して C++ で実装されます。
テンプレート 空所 スワップ ( T & 私 、 T & j ) {
温度 = 標準 :: 動く ( 私 ) ;
私 = 標準 :: 動く ( j ) ;
j = 標準 :: 動く ( 温度 ) ;
}
ステートメント「T temp = std::move(i)」;要素「i」のコピーを作成し、それを複製します。ここで、「i = std::move(j)」; 「i」の元のアイテムを破棄し、元の「j」の代わりに「j」の「i」のコピーを保存します。式「j = std:: move(temp)」; temp のクローンで「i」を保存し、temp の同一の内容を削除します。また、swap() 関数の実行が完了したら、temp 変数を削除します。
例 1: std::move メソッドを使用してスワップするプログラム
以下に示すように、C++11 機能 std::move を使用して 2 つのオブジェクトを交換できます。
#include
#include <ベクター>
テンプレート
空所 スワップ ( T & a 、 T & b )
{
温度 = 標準 :: 動く ( a ) ;
a = 標準 :: 動く ( b ) ;
b = 標準 :: 動く ( 温度 ) ;
}
整数 主要 ( )
{
標準 :: ベクター リスト = { 10 、 12 、 13 、 15 、 16 、 17 } ;
整数 私 = 3 、 j = 5 ;
スワップ ( リスト [ 私 ] 、 リスト [ j ] ) ;
為に ( 整数 私 : リスト ) {
標準 :: カウト << 私 << ' ' ;
}
戻る 0 ; }
オブジェクト「T」を持つテンプレート宣言があります。その後、「スワップ」として機能を確立しました。この関数は、「T」型の 2 つのパラメーター &a および &b を取ります。引数 T& a、T& b が渡された変数のアドレスを参照または格納し、戻らずにそれらに直接適用した結果、swap(T& a, T& b) 関数は参照による呼び出しと呼ばれます。
void スワップ内では、std::move メソッドを使用してスワッピングのアルゴリズムを適用しました。次に、プログラムのメインを構築しました。ここでは、変数「list」を宣言し、数値のリストで初期化しました。スワップ用の「i」と「j」の値を設定しました。 2 番目のインデックスにある数値は、5 番目のインデックスの数値に置き換えられました。次に、swap 関数を呼び出し、「i」と「j」のインデックスをスワップ用に渡しました。 for ループは、スワップされたリストを出力するために使用されます。
出力には、変更されたリストが表示されました。生成された新しいリストが、指定されたインデックスに従って値を交換したことを確認できます。
例 2: std::swap メソッドを使用してスワップするプログラム
ユーティリティ ヘッダー (C++11) にある std::swap メカニズムを利用するのが通常の修正です。 2 つのオブジェクトの値を切り替えて機能させます。
#include#include <ベクター>
#include <ユーティリティ>
整数 主要 ( )
{
標準 :: vectorarr = { 3 、 6 、 9 、 15 、 13 } ;
整数 私 = 3 、 j = 4 ;
標準 :: スワップ ( 到着 [ 私 ] 、 到着 [ j ] ) ;
為に ( 整数 私 : 到着 ) {
標準 :: カウト << 私 << ' ' ;
}
戻る 0 ;
}
ヘッダー ファイル
std::swap メソッドを使用してスワップ操作後に取得されたリストは、次のように表示されます。
例 3: std::iter_swap メソッドを使用してスワップするプログラム
アルゴリズムのヘッダーにリストされている std::iter_swap アルゴリズムの使用は、追加のオプションです。それが動作する方法は、提供された反復子が指すオブジェクトの値を切り替えることです。
#include#include <ベクター>
#include <イテレータ>
#include <アルゴリズム>
整数 主要 ( )
{
標準 :: ベクトルベク = { 64 、 61 、 62 、 63 、 60 } ;
整数 私 = 0 、 j = 4 ;
自動 itr1 = 標準 :: 次 ( 事。 始める ( ) 、 私 ) ;
自動 itr2 = 標準 :: 次 ( 事。 始める ( ) 、 j ) ;
標準 :: iter_swap ( itr1 、 itr2 ) ;
為に ( 整数 私 : 事 ) {
標準 :: カウト << 私 << ' ' ;
}
戻る 0 ;
}
プログラムのメイン メソッドに対して、ベクトル変数「vec」を宣言し、数値のベクトル リストを割り当てました。次に、変数「i」と「j」にインデックス位置を指定しました。 iter1 と iter2 を引数として取る std::iter_swap メソッドが呼び出されます。 iter1 と iter2 は auto キーワードで宣言されており、反復操作があります。 for ループ メソッドは、実行時にベクトル配列のスワップされた値を出力します。
std::iter_swap メソッドは、指定されたベクトルの値を正常にスワップしました。
例 4: 一時変数を使用せずにスワップするプログラム
この例は、一時変数を使用せずに C++ コードで数値を交換する新しい方法を示しています。
#include名前空間 std の使用 ;
整数 主要 ( )
{
整数 x1 = 2 、 x2 = 12 ;
カウト << 「交換前」 << エンドル ;
カウト << 'x1 = ' << x1 << '、x2 = ' << x2 << エンドル ;
x1 = x1 + x2 ;
x2 = x1 - x2 ;
x1 = x1 * x2 ;
カウト << ' \n 交換後。」 << エンドル ;
カウト << 'x1 = ' << x1 << '、x2 = ' << x2 << エンドル ;
戻る 0 ; }
このプログラムの動作を調べてみましょう。ここでは、x1 と x2 を宣言しており、それぞれ初期値として数値が設定されています。次に、式 x1 = x1+ x2 を使用して、x1 と x2 を加算し、結果を x1 に入れます。これは、x1 が 2 プラス 12 に等しいことを示します。したがって、14 に等しくなります。次に、式 x2 = x1 – x2 を適用します。これは、x2 = 14 – 12 であることを示しています。したがって、x2 は 2 に等しくなります。もう一度、式 x1 = x1 – x2 を適用します。これは、x1 = 14 – 2 であることを示しています。したがって、最後に x1 = 12 になります。その結果、番号が変更されました。
前後を入れ替えた番号が以下のプロンプト画面に表示されます。
結論
ここでは、C++ での swap() の完全な説明、その使用法、およびその機能を示すいくつかの例について説明します。 std:: swap() 関数を使用すると、2 つの変数の値を切り替えることができます。 C++ STL には、std::swap() という組み込み関数が含まれています。 swap(T& variable 1, T& variable 2) 関数の参照による呼び出しと、データ変数の型に応じた C++ オーバーロード swap() についても、このチュートリアルで説明します。