どうも、ちょげ(@chogetarou)です。
配列(array)を逆順でループする方法を紹介します。
方法

配列(array)を逆順でループする方法は、4つあります。
for文でインデックスをループ
1つ目は、for文でインデックスを逆順でループする方法です。
まず、for文のループ変数を配列の要素数を「-1」した値(配列の末尾のインデックス)で初期化します。
for文の終了条件にループ変数が0以上を指定し、ループの最後に行う処理でループ変数を「-1」します。
そして、for文の{}内にループ処理を指定します。
//myArray = 対象の配列
for (int i = size(myArray) - 1; i >= 0; --i) {
//ループ処理
}
上記のfor文は、配列(array)のインデックスを逆順でループします。
使用例
#include <iostream>
using namespace std;
int main(void){
int nums[6] = { 1, 2, 3, 4, 5, 6 };
for (int i = size(nums) - 1; i >= 0; --i) {
cout << nums[i] << endl;
}
return 0;
}
出力:
6
5
4
3
2
1
for文でイテレーターをループ
2つ目は、for文でイテレーターをループする方法です。
まず、for文のループ変数を引数に配列を指定したrbegin()の値で初期化します。
for文の終了条件に「ループ変数」が「引数に配列を指定したrend()の値」でないことを指定し、ループの最後に行う処理でループ変数を「+1」します。
そして、for文の{}内にループ処理を指定します。
ループ処理では、ループ変数の参照で配列の要素を取得します。
//myArray = 対象の配列
for (auto i = rbegin(myArray); i != rend(myArray); ++i) {
//ループ処理
}
上記のfor文は、配列を逆順でループします。
使用例
#include <iostream>
using namespace std;
int main(void){
int nums[6] = { 1, 2, 3, 4, 5, 6 };
for (auto i = rbegin(nums); i != rend(nums); ++i) {
cout << *i << endl;
}
return 0;
}
出力:
6
5
4
3
2
1
whileでイテレーターをループ
3つ目は、whileでイテレーターをループする方法です。
まず、ループ用の変数を引数に配列を指定したrbegin()の値で初期化します。
whileの終了条件に、「ループ用の変数」が「引数に配列を指定したrend()の値」ではないことを指定します。
次に、whileの{}内にループ処理を指定します。
ループ処理では、ループ変数の参照で配列の要素を取得します。
最後に、whileのループ処理の最後で、ループ変数の値を「+1」します。
//T=要素の型, myArray=対象の配列
auto i = rbegin(myArray);
while (i != rend(myArray)) {
//ループ処理
++i;
}
上記のwhileは、配列(array)を逆順でループします。
使用例
#include <iostream>
using namespace std;
int main(void){
int nums[6] = { 1, 2, 3, 4, 5, 6 };
auto i = rbegin(nums);
while (i != rend(nums)) {
cout << *i << endl;
++i;
}
return 0;
}
出力:
6 5 4 3 2 1
for_eachで要素をループ
4つ目は、for_eachで要素をループする方法です。
まず、for_eachを呼び出します。
次に、for_eachの第1引数にrbegin()、第2引数にrend()を指定します。
for_eachの第3引数に、引数1つの関数を指定します。
関数の{}内に、ループ処理を指定します。
(関数の引数で、配列の要素を取得)
そして、rbegin()とrend()の両方の引数に、配列を指定します。
//T=要素の型, myArray=対象の配列
for_each(rbegin(myArray),
rend(myArray),
[] (T x) {
//ループ処理
//引数で要素を取得
});
上記のfor_eachは、配列を逆順でループします。
使用例
#include <iostream>
using namespace std;
int main(void){
int nums[6] = { 1, 2, 3, 4, 5, 6 };
for_each(rbegin(nums),
rend(nums),
[] (int x) {
cout << x << endl;
});
return 0;
}
出力:
6
5
4
3
2
1
まとめ
配列(array)を逆順でループする方法は、次の4つです。
- for文でインデックスをループする方法
for (int i = size(myArray) - 1; i >= 0; --i) { ループ処理 }
- for文でイテレーターをループする方法
for (auto i = rbegin(myArray); i != rend(myArray); ++i) { ループ処理 }
- whileでイテレーターをループする方法
auto i = rbegin(myArray);
while (i != rend(myArray)) { /*ループ処理*/ ++i; }
- for_eachで要素をループする方法
for_each(rbegin(myArray), rend(myArray), [] (T x) { ループ処理 });
コメント