#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専用の自動化ツールをオーダーメイドで作成しています。気になる方は こちらをご覧ください。

コメント

このブログの人気の投稿

#25 Rustで学ぶAI API(ChatGPT等)の呼び出し方の基本

#8 C++で学ぶ文字列操作の基本

#16 TypeScriptで学ぶ辞書型(マップ)の基本