C++で同じサイズの2つの配列を高速に交換する方法
この記事では、C++において同じサイズの2つの配列を素早く交換(スワップ)する方法について解説します。
要素を1つずつ手作業で入れ替える代わりに、標準ライブラリが提供する std::swap() を使えば、わずか1行のコードで2つの配列の中身を効率的に入れ替えることができます。
std::swap()とは
std::swap() は <utility> ヘッダーで定義されている関数で、2つのオブジェクトの値を交換します。配列に対して使用した場合、同じサイズ・同じ型であれば、各要素をまとめて交換してくれます。
サンプルコード
#include <iostream>
#include <utility>
using namespace std;
int main() {
int a[] = {1, 2, 3, 4};
int b[] = {5, 6, 7, 8};
int n = sizeof(a) / sizeof(a[0]);
// 配列aとbを丸ごと交換
swap(a, b);
cout << "a[] = ";
for (int i = 0; i < n; i++)
cout << a[i] << ", ";
cout << "\nb[] = ";
for (int i = 0; i < n; i++)
cout << b[i] << ", ";
return 0;
}実行結果
a[] = 5, 6, 7, 8, b[] = 1, 2, 3, 4,
実行結果からわかるように、swap(a, b) を呼び出すだけで、配列 a の中身が {5, 6, 7, 8} に、配列 b の中身が {1, 2, 3, 4} に完全に入れ替わっています。
ポイント
std::swap()を使用するには<utility>(または<algorithm>)ヘッダーのインクルードが必要です。- ループで要素を1つずつ入れ替える実装に比べ、コードが簡潔になり可読性も向上します。
- C++11以降では、配列に対する
std::swap()は内部で効率的な処理が行われるため、パフォーマンス面でも安心して使えます。
-
C++で2つのソート済み配列をマージしてK番目の要素を求める方法
このチュートリアルでは、2つのソート済み配列をマージ(統合)した配列から、K番目の要素を見つけるプログラムをC++で作成します。まず、問題を解くための手順を確認しましょう。2つのソート済み配列を初期化します。サイズ m + n の空の配列を用意します。2つの配列を新しい配列にマージします。マージ後の配列から k - 1 番目の要素を返します。このアルゴリズムは、マージソートの要領で2つの配列の先頭同士を比較しながら小さい方を順に格納していくことで、全体をソートされた状態で統合できるのがポイントです。マージ処理の計算量は O(m + n) となります。サンプルコードそれでは、実際のコードを見てみ
-
OpenCVとC++を使った色追跡の実装方法:HSV変換から軌跡の描画まで
色追跡(カラートラッキング)は、色検出とよく似た画像処理です。追跡を実現するには、検出したオブジェクトの面積を計算し、その領域の現在位置を求める処理を数行追加します。最後に、OpenCVのline()関数を使って、オブジェクトが移動した軌跡を線として描画します。 この記事では、トラックバーでHSVのしきい値をリアルタイムに調整しながら、Webカメラの映像から特定色のオブジェクトを検出し、その動きを追跡する方法を解説します。 色追跡の基本的な流れ 映像の取得:VideoCaptureクラスでWebカメラからフレームを取得します。 HSVへの変換:cvtColor()関数でBGR画像をHSV形