C++で配列を逆順に反転する方法を解説
本記事では、C++を使って配列を逆順(降順)に反転する方法を解説します。ループで配列を走査しながら、最も大きいインデックスの要素と最も小さいインデックスの要素を順次入れ替えていくことで、配列全体を反転させます。
アルゴリズムの考え方
配列の反転は、以下の手順で実現できます。
- 先頭を指す low ポインタと、末尾を指す high ポインタを用意します。
low < highが成り立つ間、swap関数を使って両端の要素を入れ替えます。- 1回の入れ替えごとに
lowを1つ進め、highを1つ戻し、中央に向かって処理を進めます。
この方法なら、計算量は O(n)、追加のメモリは不要(空間計算量 O(1))で効率的に配列を反転できます。
実装例
#include <iostream>
#include <algorithm>
using namespace std;
void reverseArray(int arr[], int n){
// 両端から中央に向かって要素を入れ替える
for (int low = 0, high = n - 1; low < high; low++, high--){
swap(arr[low], arr[high]);
}
// 反転後の配列を表示
for (int i = 0; i < n; i++){
cout << arr[i] << " ";
}
}
int main(){
int arrInput[] = { 11, 12, 13, 14, 15 };
// 元の配列を表示
cout << endl << "Array::";
for (int i = 0; i < 5; i++){
cout << arrInput[i] << " ";
}
// 配列の要素数を計算
int n = sizeof(arrInput) / sizeof(arrInput[0]);
// 配列を反転して表示
cout << endl << "Reversed::";
reverseArray(arrInput, n);
return 0;
}
コードのポイント
<algorithm>ヘッダーに含まれるswap関数を利用することで、2つの要素の入れ替えを簡潔に記述できます。sizeof(arrInput) / sizeof(arrInput[0])により、配列の要素数を自動的に求めています。これにより、要素数が変わってもコードを修正する必要がありません。reverseArray関数は元の配列を直接書き換えるため、追加の配列を確保する必要がありません。
実行結果
整数型の配列を降順に反転するよう渡すと、次の出力が得られます。
Array::11 12 13 14 15 Reversed::15 14 13 12 11
このように、元の配列 {11, 12, 13, 14, 15} が {15, 14, 13, 12, 11} と逆順に出力され、配列の反転が正しく行われていることが確認できます。
まとめ
C++で配列を反転するには、両端から中央に向かって要素を入れ替えていく方法がシンプルかつ効率的です。なお、C++11以降では標準ライブラリの std::reverse(arrInput, arrInput + n) を使うことでも、同様に配列を反転できます。用途に応じて使い分けるとよいでしょう。
-
C++で2次元配列を関数に渡す方法
C++では、配列をそのまま関数の引数として渡すことができます。本記事では、2次元配列を関数に引き渡して、その要素をすべて表示するプログラムを紹介します。 アルゴリズム Begin 2次元配列 n[][] を関数 show() に渡す。 show() 関数内で、二重の for ループ(ネストされたループ)を使って配列 n の全要素を走査する。 End サンプルコード #include <iostream> using namespace std; void show(int n[4][3]); int main() { int n[4][3] = {
-
【C++入門】配列を関数に渡す3つの方法をわかりやすく解説
C++では、配列全体をそのまま関数の引数として渡すことはできません。しかし、インデックスを付けずに配列名を指定することで、配列へのポインタを渡すことができます。これは「配列名は先頭要素へのポインタに読み替えられる(配列の減衰)」というC++の仕組みによるものです。1次元配列を関数の引数として渡したい場合は、以下の3つのいずれかの方法で関数の仮引数を宣言します。どの方法でも、コンパイラに対して「整数型のポインタを受け取る」という情報が伝わるため、動作結果はすべて同じになります。配列を関数に渡す3つの宣言方法1. ポインタとして仮引数を宣言するvoid myFunction(int *param)