通常の for ループは次のとおりです。
int a[] = {1, 2, 3, 4, 5};
for (int i = 0; i < sizeof(a) / sizeof(*a); ++i) {
cout << "a[" << i << "]" << a[i] << endl;
}
また、c++11 の範囲ベースの for ループについてはどうでしょうか。例は次のとおりです。
// 範囲ベースの for ループ
for (int &tmp : a) {
cout << "tmp " << tmp << endl;
}
同じ機能を実現するには、範囲ベースの for ループ コードの方が簡潔であることがわかります。
ただし、次の問題にも注意してください。
#include <iostream>
名前空間 std を使用します。
//仮引数の配列が配列ではなくポインタ変数で要素数が確認できない
void func(int a[]) {
// エラー範囲ベースの for ループ。この範囲は決定されます。それ以外の場合は使用できません。
for (auto p : a) {
cout << p << endl;
}
}
int main() {
int a[] = {1, 2, 3, 4, 5};
// 範囲ベースの for ループ
for (int &tmp : a) {
cout << "tmp " << tmp << endl;
}
0 を返します。
}
上記のコード ブロックの func 関数はコンパイルできません. その理由は, 範囲ベースの, 範囲を決定する必要があるからです. しかし, func の関数パラメータは配列ではなくポインタ変数です.要素数を特定できないため、コンパイルできません