#6 C++で学ぶループの基本
C++のループは、C言語系の言語に共通する標準的な書き方に加えて、現代的な範囲for文も使えるようになっています。この記事では、C++におけるループの基本を、つまずきやすいポイントも含めて解説します。
for文の基本
for (int i = 0; i < 5; i++) {
std::cout << i << std::endl;
}
for文のカッコの中は「初期化式; 条件式; 更新式」の3つに分かれています。int i = 0で変数iを用意し、i < 5が真である間だけループを繰り返し、1周するたびにi++でiを1増やします。この3点セットは他のC系言語(Java、C#など)ともほぼ共通の書き方なので、一度覚えると応用が利きます。
範囲for文(C++11以降)
比較的新しいC++では、配列やベクター(可変長のリストのようなもの)の中身を1つずつ処理する、簡潔な書き方が使えます。
std::vector<std::string> fruits = {"りんご", "みかん", "ぶどう"};
for (const auto& fruit : fruits) {
std::cout << fruit << std::endl;
}
autoを使うことで、型を書く手間を省きながら、簡潔にループを書けます。ここでconst auto&としているのは、要素をコピーせず参照で受け取ることでムダな処理を減らすためです。中身を書き換えたい場合は&だけを付け(auto& fruit)、コピーで十分な小さな型(int等)ならそのままauto fruitでも構いません。
while文とdo-while文
int count = 0;
while (count < 5) {
std::cout << count << std::endl;
count++;
}
while文は「条件を先に確認してから」ループ本体を実行します。条件が最初から偽であれば、本体は一度も実行されません。一方、C++にはdo-while文もあり、こちらは「本体を1回実行してから」条件を確認します。
int count = 0;
do {
std::cout << count << std::endl;
count++;
} while (count < 5);
「最低1回は必ず処理を実行したい」というケース(例: ユーザーへの入力確認を繰り返す処理)ではdo-whileが便利です。
breakとcontinueでループを制御する
breakはループを即座に抜け出す命令、continueはその周だけスキップして次の周に進む命令です。
for (int i = 0; i < 10; i++) {
if (i == 3) continue; // 3だけスキップ
if (i == 6) break; // 6で終了
std::cout << i << std::endl;
}
入れ子(ネスト)になったループの中でbreakを使うと、抜けるのは内側のループだけである点には注意が必要です。外側のループごと抜けたい場合は、フラグ変数を使うか、関数化してreturnで抜けるといった工夫が必要になります。
C++ならではの注意点
C++には昔ながらの書き方と、新しく追加された書き方が混在しています。範囲for文は比較的新しい機能のため、古い教材や環境では使えないことがあります。学習中のC++のバージョンを意識しておくとよいでしょう。また、for文の条件式を書き間違えて無限ループになるバグ(例: i++を書き忘れる、条件を<=ではなく<にすべきところを逆にする等)は初心者がよくハマるポイントなので、ループを書いたら必ず終了条件を指差し確認する習慣をつけましょう。
まとめ
C++のループは伝統的なfor・while・do-whileに加え、範囲for文によって配列の処理がより簡潔に書けるようになっています。break・continueと合わせて使い分けられるようになると、ループ処理の表現力がぐっと広がります。
本ページはプロモーションを含みます。
参考書籍(PR)
C++をもっと学びたい方には「新・明解C++入門編」がおすすめです。
PR
コードを書かずに自動化したい方へ
「学んだけど自分の作業に組み込む時間がない」という方向けに、ダブルクリックで動く Windows専用の自動化ツールをオーダーメイドで作成しています。気になる方は こちらをご覧ください。
コメント
コメントを投稿