C++ の逆配列
胡金庫
2023年10月12日
-
C++ で配列を逆順にするには
vector
範囲ベースのコンストラクタを使用する -
C++ で
std::reverse
関数を使用して配列を逆順にする -
C++ で
rbegin
/rend
イテレータを使用して配列を逆順にする
この記事では、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;
著者: 胡金庫