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関数(【標準ライブラリ】第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));
(array1, array1 + SIZE_OF_ARRAY(array1));
printElems(array2, array2 + SIZE_OF_ARRAY(array2));
printElems}
実行結果:
4 3 2 1 0
5 4 3 2 1 0
std::reverse関数は、配列でなく、std::vector などのコンテナ類であっても使用できます。要素の型も問わないので、非常に汎用的な方法です。また、自力で実装するよりも、安全かつ効率的でもあります。
新規作成。
Programming Place Plus のトップページへ
はてなブックマーク に保存 | Pocket に保存 | Facebook でシェア |
X で ポスト/フォロー | LINE で送る | noteで書く |
RSS | 管理者情報 | プライバシーポリシー |