ループは、ある処理を繰り返し実行するために使います。
もっともよく使われるのは、while loop(いつ終わるか決まっていない繰り返し)とfor loop(回数を決めて行う繰り返し)の2つです。
このほかにもfor eachループというものがあり、これについては後の概念で扱います。
for loopは、ヘッダーと、波括弧で囲まれたループの本体を含むコードブロックでできています。
ヘッダーは、セミコロン;で区切られた3つの要素から成ります。init-statement、condition、そしてもう1つの式です。
これらの要素は、どれも空にすることができます。
for (init-statement; condition; expression) {
some_statement;
}
trueと評価されるあいだは、ループ内のコードが実行されます。
この式がfalseと評価されると、その時点でループの繰り返しは実行されなくなります。while loopは、条件がtrueであるかぎり本体を実行します。
次のコードは、forループをwhileループに書き換える方法を示しています。
init-statement;
while(condition) {
some_statement;
expression;
}
ループを扱っていると、カウンター変数に1を足したり、1を引いたりすることがよくあります。
これはあまりに頻繁に行われるため、専用の演算子++と--が用意されています。
これらには前置形と後置形があります。 前置形は文の中で使う前に変数を変更し、後置形は使ったあとに変更します。 たいていの場合は、前置形を使うとよいでしょう。
int a{3};
int b{--a};
// b is 2, a is now 2
int c{a++};
// c is 2, a is now 3
forループの例initの部分はふつうカウンター変数を用意し、conditionはループを続けるか止めるかを判定し、postの部分はふつう繰り返しのたびにカウンターをインクリメントします。
int sum{0};
for (int i{1}; i < 10; ++i) {
sum += i;
}
このループは、1から9までの数値を合計します(9も含みます)。
breakとcontinue
ループの本体では、breakキーワードを使ってループの実行を完全に止めることができます。
int sum{2};
while(true) {
sum *= 2;
if (sum > 1000)
break;
}
// sum is now 1024
これに対して、continueキーワードは現在の繰り返しの実行だけを止め、次の繰り返しへ進みます。
int equal_sum{0};
for (int i{1}; i < 7; ++i) {
if (n%2 == 1) {
continue;
}
equal_sum += i;
}
// equal_sum is now 12
補足:
breakとcontinueの使用を最小限にするか、まったく避けたほうが、ループのロジックはたいてい理解しやすくなります。