C++
 Computer >> コンピューター >  >> プログラミング >> C++

C++におけるforループとwhileループの違いを徹底解説

はじめに

プログラミングにおけるループ(繰り返し処理)は、同じコードブロックを複数回実行するために使用されます。本記事では、C++でよく使われる2種類のループ、forループとwhileループの違いについて詳しく解説します。

forループとは

forループは反復制御構造の一種で、指定したコードブロックをあらかじめ決めた回数だけ繰り返し実行するための構文です。初期化・条件・更新を1行にまとめて記述できるため、繰り返し回数が明確な場合に適しています。

構文

for(初期化; 条件; 更新){
    // 繰り返し実行するコード
}

whileループとは

whileループは前置判定(エントリ制御)型のループで、指定した条件がtrueである限り、ステートメントを繰り返し実行し続けます。終了条件が処理の結果に依存する場合などにも柔軟に対応できます。

構文

while(条件){
    // 繰り返し実行するコード
}

forループとwhileループの違い

  • forループは「回数」による制御を行うループである一方、whileループは「条件」による制御を行うループです。

  • forループでは条件と一緒に更新処理を括弧内に記述できますが、whileループの括弧内には制御式しか書けません。

  • forループのテスト条件は整数同士の比較が使われることが多いのに対し、whileループではブール値に評価される任意の式を条件として使用できます。

両者の挙動が異なるコード例

両方のループの動作が異なる典型例が、ループ本体にcontinue文が含まれるケースです。forループでは更新処理が括弧内に組み込まれていますが、whileループでは更新処理がループ本体内にあるため、continueの位置によって挙動が大きく変わります。

例1:forループの場合

以下のプログラムは、forループとcontinue文の動作を示したものです。

#include<iostream>
using namespace std;

int main(){

    cout<<"Displaying for loop working with continue statement\n";
    for(int i = 0; i < 5; i++){
        if(i == 3)
            continue;
        cout<<"loop count "<<i<<endl;
    }
    return 0;
}

出力

Displaying for loop working with continue statement
loop count 0
loop count 1
loop count 2
loop count 4

forループでは、continueが実行されても更新処理(i++)が必ず行われるため、iが3のときだけ出力がスキップされ、それ以外の値は正常に出力されます。

例2:whileループの場合

次に、whileループで同じ処理を書いた場合を見てみましょう。

#include<iostream>
using namespace std;

int main(){

    cout<<"Displaying while loop working with continue statement";
    int i = 0;
    while(i < 5){
        if(i == 3)
            continue;
        cout<<"loop count "<<i<<endl;
        i++;
    }
    return 0;
}

出力

Displaying while loop working with continue statementloop count 0
loop count 1
loop count 2

whileループでは、iが3になった時点でcontinueが実行されると、その後のi++がスキップされてしまいます。その結果、iは3のまま更新されず、条件式が永遠にtrueになり続けるため、プログラムは無限ループに陥ります。

まとめ

forループは繰り返し回数が決まっている場合に、whileループは終了条件が動的に変化する場合にそれぞれ適しています。ただし、continue文を使用する際は更新処理の位置に注意し、特にwhileループでは無限ループが発生しないよう設計に気をつけましょう。

  1. C++でピラミッドの体積を計算するプログラムの作り方|底面の形状別の公式と実装例

    ピラミッドの底面の種類に応じた辺の長さが与えられたとき、そのピラミッドの体積を計算するのが本記事のテーマです。 ピラミッドとは、外側の面がすべて三角形で構成され、それらが共通の一点(頂点)で交わることで鋭い角を形成する3次元図形です。ピラミッドの体積は、底面がどのような形状であるかによって異なります。 ピラミッドの底面にはさまざまな種類があり、代表的なものは以下の通りです。 底面の形状別の体積の求め方 三角形の底面(三角錐) 底面が三角形の場合、ピラミッドの体積は次の公式で求められます。 体積 = (1/6) × a × b × h 正方形の底面(四角錐) 底面が正方形の場合、ピラミッドの体

  2. C++で学ぶクイックソート(QuickSort)の仕組みと実装方法

    クイックソートとはクイックソート(Quicksort)は、比較に基づいて未ソートのリスト(配列)を並べ替えるソートアルゴリズムの一つです。「パーティション交換ソート(partition exchange sort)」とも呼ばれます。クイックソートは安定ソートではありません。これは、等しい値を持つ要素同士の相対的な順序が保持されないためです。ただし、配列に対してごくわずかな追加メモリだけで動作するため、メモリ効率に優れています。選択ソートと非常に似ていますが、常に最悪のパーティションを選んでしまうわけではない点が異なり、より洗練された形の選択ソートと捉えることもできます。クイックソートは最も効率