C++におけるループ(繰り返し処理)とは、同じ処理を複数回実行するための構文です。
プログラムでは以下のような場面で頻繁に使用されます。
- 配列やデータの処理
- 計算の反復
- 入力処理
- ゲームやサーバーの処理
- アルゴリズムの実装
C++では主に次の4つのループ構文が使われます。
forループwhileループdo whileループ- range-based
for(C++11以降)
それぞれの特徴と使い方を順番に解説します。
目次
forループ
forループは、カウンタ変数を使った反復処理に最もよく使われるループです。
特に「決まった回数の処理」を書く場合に適しています。
基本構文
for (初期化; 条件式; 更新式)
{
繰り返し処理
}
それぞれの役割は次の通りです。
| 部分 | 役割 |
|---|---|
| 初期化 | ループ開始時に一度だけ実行 |
| 条件式 | trueの間ループが続く |
| 更新式 | 1回ループするごとに実行 |
基本例
#include <iostream>
using namespace std;
int main()
{
for(int i = 0; i < 5; i++)
{
cout << i << endl;
}
}
出力
0
1
2
3
4
動作の流れ
i = 0を実行i < 5を判定- trueなら処理実行
i++を実行- 再び条件判定
1〜10まで表示する例
for(int i = 1; i <= 10; i++)
{
cout << i << endl;
}
配列をループする例
int arr[5] = {10,20,30,40,50};
for(int i = 0; i < 5; i++)
{
cout << arr[i] << endl;
}
whileループ
whileループは、条件が成立している間だけ繰り返すループです。
forとの違いは、「初期化・更新を自分で書く必要がある」点です。
構文
while(条件)
{
処理
}
基本例
#include <iostream>
using namespace std;
int main()
{
int i = 0;
while(i < 5)
{
cout << i << endl;
i++;
}
}
出力
0
1
2
3
4
whileが向いているケース
- 入力が終了するまで処理
- 条件が満たされるまで計算
- 終了条件が明確な処理
do whileループ
do whileは、必ず1回は処理が実行されるループです。
通常の while との違いは、処理 → 条件判定 の順番で実行される点です。
構文
do
{
処理
}
while(条件);
※最後に セミコロンが必要です。
例
#include <iostream>
using namespace std;
int main()
{
int i = 0;
do
{
cout << i << endl;
i++;
}
while(i < 5);
}
入力処理の例
「0が入力されるまで続ける」
int x;
do
{
cin >> x;
}
while(x != 0);
range-based for(C++11)
C++11以降では、配列やコンテナを簡単にループできるrange-based for が使えます。
構文
for(型 変数 : コンテナ)
{
処理
}
配列の例
int arr[] = {10,20,30};
for(int x : arr)
{
cout << x << endl;
}
出力
10
20
30
vectorの例
#include <vector>
vector<int> v = {1,2,3};
for(int x : v)
{
cout << x << endl;
}
参照を使う場合
要素を書き換える場合は 参照 を使います。
for(int& x : v)
{
x *= 2;
}
読み取り専用の書き方
for(const int& x : v)
{
cout << x << endl;
}
コピーを防げるため、効率的な書き方です。
無限ループ
条件を常に true にすると、ループは終了しません
例
while(true)
{
cout << "loop" << endl;
}
または
for(;;)
{
}
無限ループの主な用途
- ゲームループ
- サーバープログラム
- 常時監視処理
break
break は ループを強制終了する命令です。
例
for(int i = 0; i < 10; i++)
{
if(i == 5)
break;
cout << i << endl;
}
出力
0
1
2
3
4
注意点
ネストしたループでは、break は最も内側のループだけ終了します。
continue
continue は その回の処理をスキップして次のループへ進む命令です。
例
for(int i = 0; i < 5; i++)
{
if(i == 2)
continue;
cout << i << endl;
}
出力
0
1
3
4
ネストループ(ループの中のループ)
ループの中に別のループを書くこともできます。
これをネストループと呼びます。
例
for(int i = 0; i < 3; i++)
{
for(int j = 0; j < 3; j++)
{
cout << i << "," << j << endl;
}
}
出力
0,0
0,1
0,2
1,0
1,1
1,2
2,0
2,1
2,2
実践例:九九
for(int i = 1; i <= 9; i++)
{
for(int j = 1; j <= 9; j++)
{
cout << i * j << " ";
}
cout << endl;
}
ループの使い分け
| ループ | 特徴 |
|---|---|
| for | カウンタ型の反復 |
| while | 条件中心の反復 |
| do while | 最低1回は処理 |
| range-for | 配列・コンテナ処理 |
まとめ
C++のループは主に次の4種類です。
forwhiledo while- range-based
for
基本的な違いは以下です。
for→ カウンタ付きループwhile→ 条件中心のループdo while→ 必ず1回実行- range-for → コンテナ処理を簡潔に書ける
これらを理解すると、C++の基本的な反復処理はほぼ扱えるようになります。
以上、C++のループについてでした。
最後までお読みいただき、ありがとうございました。
