C++ での continue ステートメント
 
この記事では、C++ で continue ステートメントを利用する方法について説明します。
continue ステートメントを使用して、ループ本体の残りの部分をスキップする
    
continue ステートメントは、ループ依存のブロック実行を操作するために反復ステートメントと組み合わせて使用されます。つまり、ループ内で continue ステートメントに到達すると、次のステートメントはスキップされ、制御は条件評価ステップに移動します。条件が真の場合、ループは通常どおり新しい反復サイクルから開始されます。
continue は、ループステートメント for、while、do...while、または範囲ベースの for の少なくとも 1つで囲まれたコードブロックにのみ含めることができることに注意してください。複数のネストされたループがあり、continue ステートメントが内側のループに含まれているとします。スキップ動作は内側のループにのみ影響し、外側のループは通常どおり動作します。
次の例では、2つの for ループを示しています。ループの内部は文字列のベクトルを反復処理します。continue ステートメントはループ本体の先頭で指定されており、基本的に次のステートメントが実行されるかどうかを制御することに注意してください。したがって、rtop および ntop の文字列値は出力に表示されず、外側のループはそのすべてのサイクルを実行します。
#include <iomanip>
#include <iostream>
#include <vector>
using std::cout;
using std::endl;
using std::setw;
using std::string;
using std::vector;
int main() {
  vector<string> vec = {"ntop", "mtop", "htop", "ktop",
                        "rtop", "ltop", "ftop", "atop"};
  for (int i = 0; i < 3; i++) {
    for (const auto &it : vec) {
      if (it == "rtop" || it == "ntop") continue;
      cout << it << ", ";
    }
    cout << endl;
  }
  return EXIT_SUCCESS;
}
出力:
mtop, htop, ktop, ltop, ftop, atop,
mtop, htop, ktop, ltop, ftop, atop,
mtop, htop, ktop, ltop, ftop, atop,
または、continue の代わりに goto ステートメントを使用して、前のコードスニペットと同じ動作を実装することもできます。goto は、プログラム内の特定の行への無条件ジャンプとして機能するため、変数の初期化ステートメントをジャンプするために使用しないでください。この場合、空のステートメントに END ラベルを付けて、goto が実行を指定されたポイントに移動できるようにすることができます。
#include <iomanip>
#include <iostream>
#include <vector>
using std::cout;
using std::endl;
using std::setw;
using std::string;
using std::vector;
int main() {
  vector<string> vec = {"ntop", "mtop", "htop", "ktop",
                        "rtop", "ltop", "ftop", "atop"};
  for (int i = 0; i < 3; i++) {
    for (const auto &it : vec) {
      if (it == "rtop" || it == "ntop") goto END;
      cout << it << ", ";
    END:;
    }
    cout << endl;
  }
  return EXIT_SUCCESS;
}
continue ステートメントは、コーディングガイドラインによっては悪い習慣と見なされる可能性があり、コードが少し読みにくくなります。goto ステートメントの過度の使用についても同じ推奨事項がしばしば与えられます。それでも、与えられた問題が読みやすさのコストを内部化し、これらのステートメントを使用してより簡単な実装を提供できる場合は、これらの構造を利用できます。次のコード例は、while ループでの continue ステートメントの基本的な使用法を示しています。
#include <iomanip>
#include <iostream>
#include <vector>
using std::cout;
using std::endl;
using std::setw;
using std::string;
using std::vector;
int main() {
  vector<string> vec = {"ntop", "mtop", "htop", "ktop",
                        "rtop", "ltop", "ftop", "atop"};
  while (!vec.empty()) {
    if (vec.back() == "atop") {
      vec.pop_back();
      continue;
    }
    cout << vec.back() << ", ";
    vec.pop_back();
  }
  cout << "\nsize = " << vec.size() << endl;
  return EXIT_SUCCESS;
}
出力:
ftop, ltop, rtop, ktop, htop, mtop, ntop,
size = 0
