C++ の逆配列

胡金庫 2023年10月12日
  1. C++ で配列を逆順にするには vector 範囲ベースのコンストラクタを使用する
  2. C++ で std::reverse 関数を使用して配列を逆順にする
  3. C++ で rbegin /rend イテレータを使用して配列を逆順にする
C++ の逆配列

この記事では、C++ で配列を逆順にする方法のいくつかの方法について説明します。

C++ で配列を逆順にするには vector 範囲ベースのコンストラクタを使用する

コンテナ vector はイテレータで指定した範囲のコンストラクタをサポートしています。したがって、新しい vector 変数を宣言し、rbegin/rend イテレータを用いて最初のベクトルの値を逆順にして初期化することができます。

また、クローンを整頓しておくために関数 PrintVector を宣言し、一度の関数呼び出しで vector の内容を出力することにも注意してください。このメソッドの欠点は、新しい配列変数を構築する必要があることです。

#include <iostream>
#include <iterator>
#include <vector>

using std::copy;
using std::cout;
using std::endl;
using std::ostream_iterator;
using std::vector;

void PrintVector(vector<int> &arr) {
  copy(arr.begin(), arr.end(), ostream_iterator<int>(cout, "; "));
  cout << endl;
}

int main() {
  vector<int> arr1 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

  vector<int> arr1_reversed(arr1.rbegin(), arr1.rend());
  PrintVector(arr1_reversed);

  return EXIT_SUCCESS;
}

出力:

10; 9; 8; 7; 6; 5; 4; 3; 2; 1;

C++ で std::reverse 関数を使用して配列を逆順にする

あるいは、他の変数を宣言せずに配列の要素を逆順にするには、標準ライブラリから std::reverse 関数を呼び出すことができます。std::reverse<algorithm> ヘッダの一部であり、C++17 以降の標準ライブラリの一部です。この関数は、範囲の start/end イテレータを関数の引数として受け取り、要素を入れ替えます。std::reverse が呼び出されたベクトルは恒久的に変更され、その要素にアクセスした結果、新しい順序になります。

#include <iostream>
#include <iterator>
#include <vector>

using std::copy;
using std::cout;
using std::endl;
using std::ostream_iterator;
using std::reverse;
using std::vector;

void PrintVector(vector<int> &arr) {
  copy(arr.begin(), arr.end(), ostream_iterator<int>(cout, "; "));
  cout << endl;
}

int main() {
  vector<int> arr1 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

  reverse(arr1.begin(), arr1.end());
  PrintVector(arr1);

  return EXIT_SUCCESS;
}

出力:

10; 9; 8; 7; 6; 5; 4; 3; 2; 1;

C++ で rbegin /rend イテレータを使用して配列を逆順にする

このトピックの最初の例とは対照的に、vector の並べ替えられた内容をプログラムフローに保存する必要がなく、むしろコンソールやディスプレイに出力するだけの場合もあります。以下の例では、配列の要素を逆順で、かつ、基礎となる変数の内容を変更せずにコンソールに出力する方法を示しています。

#include <iostream>
#include <iterator>
#include <vector>

using std::copy;
using std::cout;
using std::endl;
using std::ostream_iterator;
using std::vector;

void PrintVector(vector<int> &arr) {
  copy(arr.begin(), arr.end(), ostream_iterator<int>(cout, "; "));
  cout << endl;
}

int main() {
  vector<int> arr1 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

  copy(arr1.rbegin(), arr1.rend(), ostream_iterator<int>(cout, "; "));
  cout << endl;

  return EXIT_SUCCESS;
}

出力:

10; 9; 8; 7; 6; 5; 4; 3; 2; 1;
著者: 胡金庫
胡金庫 avatar 胡金庫 avatar

DelftStack.comの創設者です。Jinku はロボティクスと自動車産業で8年以上働いています。自動テスト、リモートサーバーからのデータ収集、耐久テストからのレポート作成が必要となったとき、彼はコーディングスキルを磨きました。彼は電気/電子工学のバックグラウンドを持っていますが、組み込みエレクトロニクス、組み込みプログラミング、フロントエンド/バックエンドプログラミングへの関心を広げています。

LinkedIn Facebook

関連記事 - C++ Array