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