C++ for ループ
forループを使用すると、特定の回数だけ実行される繰り返し制御構造を記述できます。
構文
C++ ではforループの構文:
for ( init; condition; increment )
{
statement(s);
}
以下は for ループの制御フローです:
- init最初に実行され、一度だけ実行されます。このステップでは、任意のループ制御変数を宣言および初期化できます。ここに文を記述しなくてもかまいません。ただしセミコロンは必要です。
- 次に、条件が評価されます。condition真の場合、ループ本体を実行します。偽の場合、ループ本体は実行されず、制御フローは for ループの直後の文にジャンプします。
- for ループ本体を実行した後、制御フローは上記のincrement文に戻ります。この文ではループ制御変数を更新できます。この文は空にできます。ただし条件の後にセミコロンが必要です。
- 条件が再度評価されます。真であればループが実行され、このプロセスは繰り返されます(ループ本体、ステップ値の更新、条件の再評価)。条件が偽になると、for ループは終了します。
フローチャート
例
例
#include <iostream>
using namespace std;
int main ()
{
// for ループを実行
for( int a = 10; a < 20; a = a + 1 )
{
cout << "a の値:" << a << endl;
}
return 0;
}
上記のコードがコンパイルおよび実行されると、次の結果が生成されます:
a 的值: 10 a 的值: 11 a 的值: 12 a 的值: 13 a 的值: 14 a 的值: 15 a 的值: 16 a 的值: 17 a 的值: 18 a 的值: 19
範囲ベースのforループ (C++11)
for 文では単純な範囲反復が可能です:
int my_array[5] = {1, 2, 3, 4, 5};
// 各配列要素に 2 を掛ける
for (int &x : my_array)
{
x *= 2;
cout << x << endl;
}
// auto 型も C++11 の新標準の一部であり、変数の型を自動的に取得するために使用します
for (auto &x : my_array) {
x *= 2;
cout << x << endl;
}
上記の for 文の最初の部分は、範囲反復に使用する変数を定義します。通常の for ループで宣言される変数と同様に、そのスコープはループの範囲内に限定されます。そして「:」の後の2番目のブロックは、反復される範囲を表します。
例
#include<iostream>
#include<string>
#include<cctype>
using namespace std;
int main()
{
string str("some string");
// range for 文
for(auto &c : str)
{
c = toupper(c);
}
cout << str << endl;
return 0;
}
上記のプログラムは range for 文を使用して文字列を走査し、すべての文字を大文字に変換して、次の結果を出力します:
SOME STRINGその他の拡張
C++ ループ