配列を逆順に並び替える | Programming Place Plus C++編 逆引き

トップページC++編逆引き

C++編で扱っている C++ は 2003年に登場した C++03 という、とても古いバージョンのものです。C++ はその後、C++11 -> C++14 -> C++17 -> C++20 -> C++23 と更新されています。
なかでも C++11 での更新は非常に大きなものであり、これから C++ の学習を始めるのなら、C++11 よりも古いバージョンを対象にするべきではありません。特に事情がないなら、新しい C++ を学んでください。 当サイトでは、C++14 をベースにした新C++編を作成中です。

目的

配列の要素を逆の順序になるように並び替えたいとします。

以下のような配列があるとして、

int array1[] = {0, 1, 2, 3, 4};
int array2[] = {0, 1, 2, 3, 4, 5};

処理を適用後、array1 は {4, 3, 2, 1, 0} の順で、array2 は {5, 4, 3, 2, 1, 0} の順で並ぶようにします。

要素数が、奇数の場合や偶数の場合のどちらでも正しく動作するかどうかには注意が必要です。

方法①(std::reverse関数を使う)[C++03~]

標準ライブラリの std::reverse関数(【標準ライブラリ】第22章)を使うのが簡単です。

#include <algorithm>
#include <iostream>

#define SIZE_OF_ARRAY(array) (sizeof(array)/sizeof(array[0]))

namespace {
    void printElems(const int* begin, const int* end)
    {
        for (const int* p = begin; p != end; ++p) {
            std::cout << *p << std::ends;
        }
        std::cout << std::endl;
    }
}

int main()
{
    int array1[] = {0, 1, 2, 3, 4};
    int array2[] = {0, 1, 2, 3, 4, 5};

    std::reverse(array1, array1 + SIZE_OF_ARRAY(array1));
    std::reverse(array2, array2 + SIZE_OF_ARRAY(array2));

    printElems(array1, array1 + SIZE_OF_ARRAY(array1));
    printElems(array2, array2 + SIZE_OF_ARRAY(array2));
}

実行結果:

4 3 2 1 0
5 4 3 2 1 0

std::reverse関数は、配列でなく、std::vector などのコンテナ類であっても使用できます。要素の型も問わないので、非常に汎用的な方法です。また、自力で実装するよりも、安全かつ効率的でもあります。


参考リンク


更新履歴

’2017/5/29 新規作成。



逆引きのトップページへ

C++編のトップページへ

Programming Place Plus のトップページへ



はてなブックマーク に保存 Pocket に保存 Facebook でシェア
X で ポストフォロー LINE で送る noteで書く
rss1.0 取得ボタン RSS 管理者情報 プライバシーポリシー
先頭へ戻る