C++
 Computer >> コンピューター >  >> プログラミング >> C++

【C++入門】STLのreverse()関数を使って配列を反転する方法

この記事では、C++のSTL(標準テンプレートライブラリ)を使って配列を反転(逆順に並べ替え)する方法を解説します。例えば、配列が A = [10, 20, 30, 40, 50, 60] の場合、反転後の出力は B = [60, 50, 40, 30, 20, 10] のようになります。

reverse() 関数とは

配列を反転するには、ヘッダーファイル <algorithm> に用意されている reverse() 関数を使用します。この関数は、反転したい範囲の「先頭要素を指すポインタ(イテレータ)」と「末尾要素の次を指すポインタ(イテレータ)」の2つを引数に受け取り、その範囲内の要素の順序を逆にします。

コード例

#include <iostream>
#include <algorithm>
using namespace std;
int main() {
    int arr[] = {10, 20, 30, 40, 50, 60};
    int n = sizeof(arr) / sizeof(arr[0]);
    cout << "Array before reverse: ";
    for (int i = 0; i < n; i++)
        cout << arr[i] << " ";
    reverse(arr, arr + n);
    cout << "\nArray after reverse: ";
    for (int i = 0; i < n; i++)
        cout << arr[i] << " ";
}

実行結果

Array before reverse: 10 20 30 40 50 60
Array after reverse: 60 50 40 30 20 10

コードのポイント

配列サイズの取得: sizeof(arr) / sizeof(arr[0]) によって、配列全体のバイト数を1要素あたりのバイト数で割ることで、要素数 n を求めています。
範囲の指定: reverse(arr, arr + n) のように、配列名 arr が先頭要素へのポインタとして機能することを利用し、「arr」から「arr + n」までの範囲を反転対象としています。

計算量について

reverse() 関数の時間計算量は O(n) で、要素数に比例して処理時間が増加します。なお、この関数は生の配列だけでなく、std::vector や std::array などのSTLコンテナに対しても、イテレータを渡すことで同様に使用できるため、汎用性の高い便利な関数です。

  1. C++ STLのlist::reverse()関数の使い方と実例解説

    本記事では、C++におけるlist::reverse()関数の動作、構文、具体的な使用例について詳しく解説します。STLにおけるlistとはlistは、シーケンス内の任意の位置で定数時間O(1)での要素の挿入・削除を可能にするデータ構造です。listは双方向連結リストとして実装されており、メモリの非連続的な割り当てが可能です。配列、vector、dequeと比較すると、コンテナ内の任意の位置への要素の挿入・抽出・移動において優れたパフォーマンスを発揮します。一方で、要素への直接アクセス(ランダムアクセス)は遅いという特徴があります。listはforward_listと似ていますが、forwar

  2. C++のnew演算子を使って2次元配列を動的に宣言・生成する方法

    動的な2次元配列とは、基本的に「配列へのポインタ」を要素とする配列(ポインタの配列)のことです。つまり、各行が独立した1次元配列としてヒープ上に確保され、それらの先頭アドレスを格納するポインタ配列によって全体が管理されます。下図は、3×4の2次元配列のイメージです。アルゴリズムC++のnew演算子で2次元配列を動的に確保する手順は以下の通りです。Begin 配列の寸法(行数・列数)を宣言する。 new を使って 2次元配列 a[][] を動的に確保する。 配列に要素を代入する。 配列の内容を出力する。 delete でメモリを解放する。 Endサンプルコ