[C++] if文とループ処理を組み合わせたcontinueの使い方

C++では、ループ処理とif文を組み合わせて、特定の条件を満たした場合にループの次の反復にスキップするためにcontinue文を使用します。

例えば、forループやwhileループ内でif文を使って条件をチェックし、その条件が真であればcontinueを呼び出すことで、現在の反復を終了し、次の反復に進むことができます。

これにより、特定の条件を満たす要素をスキップしたり、特定の処理を省略することが可能です。

この記事でわかること
  • if文とcontinueを組み合わせた基本的な使い方
  • 各種ループ(for、while、do-while)でのcontinueの使用例
  • 配列や入力値のバリデーションにおけるcontinueの実践的な活用法
  • 複数条件や関数との組み合わせによるcontinueの応用例
  • continueを使った効率的なデータ処理とエラーハンドリングの方法

目次から探す

if文とループ処理におけるcontinueの使い方

C++におけるcontinue文は、ループ内で特定の条件を満たした場合に、残りの処理をスキップして次のループの反復に進むために使用されます。

ここでは、if文とcontinueを組み合わせた使い方や、各種ループでの使用例を紹介します。

if文とcontinueの組み合わせ

if文とcontinueを組み合わせることで、特定の条件を満たした場合にループの残りの処理をスキップすることができます。

以下はその基本的な例です。

#include <iostream>
int main() {
    for (int i = 0; i < 10; ++i) {
        // iが偶数の場合はスキップ
        if (i % 2 == 0) {
            continue;
        }
        std::cout << "奇数: " << i << std::endl;
    }
    return 0;
}

このコードは、0から9までの数字のうち、奇数のみを出力します。

if文で偶数を判定し、continue文でその後の処理をスキップしています。

forループでのcontinueの使用例

forループでcontinueを使用することで、特定の条件を満たした場合に次の反復に進むことができます。

以下はその例です。

#include <iostream>
int main() {
    for (int i = 1; i <= 5; ++i) {
        // 3の倍数をスキップ
        if (i % 3 == 0) {
            continue;
        }
        std::cout << "数値: " << i << std::endl;
    }
    return 0;
}
数値: 1
数値: 2
数値: 4
数値: 5

このプログラムは、1から5までの数値のうち、3の倍数をスキップして出力します。

whileループでのcontinueの使用例

whileループでもcontinueを使用することができます。

以下にその例を示します。

#include <iostream>
int main() {
    int i = 0;
    while (i < 10) {
        ++i;
        // 5より小さい数をスキップ
        if (i < 5) {
            continue;
        }
        std::cout << "数値: " << i << std::endl;
    }
    return 0;
}
数値: 5
数値: 6
数値: 7
数値: 8
数値: 9
数値: 10

このコードは、1から10までの数値のうち、5未満の数をスキップして出力します。

do-whileループでのcontinueの使用例

do-whileループでもcontinueを使用することができます。

以下にその例を示します。

#include <iostream>
int main() {
    int i = 0;
    do {
        ++i;
        // 2で割り切れる数をスキップ
        if (i % 2 == 0) {
            continue;
        }
        std::cout << "奇数: " << i << std::endl;
    } while (i < 10);
    return 0;
}
奇数: 1
奇数: 3
奇数: 5
奇数: 7
奇数: 9

このプログラムは、1から10までの数値のうち、奇数のみを出力します。

do-whileループは少なくとも一度は実行されるため、continue文があっても最初の反復は必ず行われます。

continue文を使った実践的な例

continue文は、特定の条件を満たした場合にループの残りの処理をスキップし、次の反復に進むために非常に便利です。

ここでは、continue文を使った実践的な例をいくつか紹介します。

配列の特定の要素をスキップする

配列の中で特定の条件を満たす要素をスキップしたい場合に、continue文を使用することができます。

以下はその例です。

#include <iostream>
int main() {
    int numbers[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    int size = sizeof(numbers) / sizeof(numbers[0]);
    for (int i = 0; i < size; ++i) {
        // 5の倍数をスキップ
        if (numbers[i] % 5 == 0) {
            continue;
        }
        std::cout << "数値: " << numbers[i] << std::endl;
    }
    return 0;
}
数値: 1
数値: 2
数値: 3
数値: 4
数値: 6
数値: 7
数値: 8
数値: 9

このプログラムは、配列内の数値のうち、5の倍数をスキップして出力します。

入力値のバリデーションでの使用

ユーザーからの入力を受け取る際に、特定の条件を満たさない入力をスキップするためにcontinue文を使用することができます。

以下はその例です。

#include <iostream>
int main() {
    int input;
    while (true) {
        std::cout << "正の整数を入力してください (0で終了): ";
        std::cin >> input;
        // 負の数をスキップ
        if (input < 0) {
            std::cout << "負の数は無効です。" << std::endl;
            continue;
        }
        // 0が入力されたら終了
        if (input == 0) {
            break;
        }
        std::cout << "入力された数: " << input << std::endl;
    }
    return 0;
}

このプログラムは、ユーザーが負の数を入力した場合に警告を表示し、その入力をスキップします。

0が入力されるとプログラムが終了します。

ネストされたループでのcontinueの活用

ネストされたループ内でcontinue文を使用することで、特定の条件を満たした場合に内側のループの処理をスキップすることができます。

以下はその例です。

#include <iostream>
int main() {
    for (int i = 1; i <= 3; ++i) {
        for (int j = 1; j <= 3; ++j) {
            // iとjが同じ場合はスキップ
            if (i == j) {
                continue;
            }
            std::cout << "i: " << i << ", j: " << j << std::endl;
        }
    }
    return 0;
}
i: 1, j: 2
i: 1, j: 3
i: 2, j: 1
i: 2, j: 3
i: 3, j: 1
i: 3, j: 2

このプログラムは、ijが同じ場合に内側のループの処理をスキップし、それ以外の組み合わせを出力します。

ネストされたループでcontinueを使うことで、特定の条件を満たす組み合わせを除外することができます。

continue文の応用例

continue文は、単純なループ制御だけでなく、さまざまな応用シナリオで活用することができます。

ここでは、continue文の応用例をいくつか紹介します。

複数条件でのcontinueの使用

continue文は、複数の条件を組み合わせて使用することができます。

以下の例では、複数の条件を満たす場合にループの処理をスキップします。

#include <iostream>
int main() {
    for (int i = 1; i <= 20; ++i) {
        // 3の倍数または4の倍数をスキップ
        if (i % 3 == 0 || i % 4 == 0) {
            continue;
        }
        std::cout << "数値: " << i << std::endl;
    }
    return 0;
}
数値: 1
数値: 2
数値: 5
数値: 7
数値: 8
数値: 10
数値: 11
数値: 13
数値: 14
数値: 17
数値: 19

このプログラムは、1から20までの数値のうち、3の倍数または4の倍数をスキップして出力します。

continueを用いた効率的なデータ処理

大量のデータを処理する際に、特定の条件を満たさないデータをスキップすることで、効率的に処理を行うことができます。

#include <iostream>
#include <vector>
int main() {
    std::vector<int> data = {10, 15, 20, 25, 30, 35, 40};
    int threshold = 25;
    for (int value : data) {
        // 閾値以下のデータをスキップ
        if (value <= threshold) {
            continue;
        }
        std::cout << "処理対象データ: " << value << std::endl;
    }
    return 0;
}
処理対象データ: 30
処理対象データ: 35
処理対象データ: 40

このプログラムは、データの中で閾値を超える値のみを処理対象として出力します。

continueと関数の組み合わせ

continue文を関数と組み合わせることで、特定の条件を満たす場合に関数の呼び出しをスキップすることができます。

#include <iostream>
void process(int value) {
    std::cout << "処理中: " << value << std::endl;
}
int main() {
    for (int i = 1; i <= 10; ++i) {
        // 偶数をスキップ
        if (i % 2 == 0) {
            continue;
        }
        process(i);
    }
    return 0;
}
処理中: 1
処理中: 3
処理中: 5
処理中: 7
処理中: 9

このプログラムは、奇数のみをprocess関数で処理します。

continueを使ったエラーハンドリング

continue文を使って、エラーが発生した場合にその処理をスキップし、次のデータに進むことができます。

#include <iostream>
#include <vector>
int main() {
    std::vector<int> data = {10, -1, 20, -2, 30, -3, 40};
    for (int value : data) {
        // 負の値をエラーとしてスキップ
        if (value < 0) {
            std::cout << "エラー: 負の値 " << value << " をスキップ" << std::endl;
            continue;
        }
        std::cout << "処理中: " << value << std::endl;
    }
    return 0;
}
処理中: 10
エラー: 負の値 -1 をスキップ
処理中: 20
エラー: 負の値 -2 をスキップ
処理中: 30
エラー: 負の値 -3 をスキップ
処理中: 40

このプログラムは、データの中で負の値をエラーとしてスキップし、正の値のみを処理します。

よくある質問

continue文はどのような場合に使うべきですか?

continue文は、ループ内で特定の条件を満たした場合に、その後の処理をスキップして次の反復に進みたいときに使うと便利です。

例えば、データの中で特定の条件を満たさない要素をスキップしたい場合や、エラーが発生した際にその処理を飛ばして次の処理に進みたい場合に使用します。

continue文を使うことで、コードの可読性を保ちながら、効率的にループを制御することができます。

continue文を使う際の注意点は何ですか?

continue文を使う際には、以下の点に注意する必要があります。

  • 無限ループの回避: continue文を使用することで、ループの終了条件が満たされない場合、無限ループに陥る可能性があります。

ループの終了条件が確実に満たされるように注意してください。

  • コードの可読性: continue文を多用すると、コードの流れが複雑になり、可読性が低下することがあります。

必要以上にcontinue文を使わないようにし、コードの意図が明確になるように心がけましょう。

  • ネストされたループ: ネストされたループでcontinue文を使用する場合、どのループに対してcontinueが適用されるのかを明確に理解しておく必要があります。

内側のループに対してのみ適用されることを忘れないようにしましょう。

continue文を使わない方が良い場合はありますか?

continue文を使わない方が良い場合もあります。

以下のような状況では、continue文を避けることを検討してください。

  • コードの複雑化: continue文を使うことで、かえってコードが複雑になり、理解しにくくなる場合があります。

特に、複数のcontinue文があると、コードの流れが追いにくくなることがあります。

  • 代替手段がある場合: continue文を使わなくても、条件分岐や関数のリファクタリングによって同じ結果を得られる場合は、そちらを選択する方が良いことがあります。

例えば、条件分岐を工夫することで、continue文を使わずに同じ処理を実現できることがあります。

  • パフォーマンスの影響: ループ内で頻繁にcontinue文を使用すると、パフォーマンスに影響を与えることがあります。

特に、大量のデータを処理する場合は、continue文の使用を最小限に抑えることを検討してください。

まとめ

この記事では、C++におけるcontinue文の基本的な使い方から、実践的な応用例までを詳しく解説しました。

continue文を活用することで、ループ内の特定の条件を満たす処理をスキップし、効率的にプログラムを制御する方法を学びました。

これを機に、実際のプログラムでcontinue文を活用し、より洗練されたコードを書いてみてはいかがでしょうか。

当サイトはリンクフリーです。出典元を明記していただければ、ご自由に引用していただいて構いません。

関連カテゴリーから探す

  • 条件分岐 (11)
  • 繰り返し処理 (11)
  • URLをコピーしました!
目次から探す