プログラムにおいて、特定の条件が満たされているあいだ、特定の処理を繰り返す構造(制御構造)のことです。
単にループと呼ぶことも多いですが、同じ処理を繰り返すことを指してループと呼ぶ場合も多くあります。
ループ構造を表現する方法は、プログラミング言語によって異なります。以下は架空のプログラミング言語による例です。
int n;
int sum = 0;
loop (sum < 100) { // 合計が 100未満のあいだ繰り返す(=合計が 100以上になるまで繰り返す)
n = input(); // 整数の入力を受け取る
sum += n; // 合計を求める
}
この例のように、ループを “繰り返す” 条件を指定するようになっていることが多いですが、ループを “終える” 条件を指定するものもあります(つまり、記述する条件の真偽は逆になります)。
C言語には、ループ構造を構築するために、while、for、do というキーワードがあります。また、(そうするべきではないですが)goto文を使ってループ構造を構築することも可能です(リンクは、それぞれを解説したC言語編のページへ移動します)。
ループを途中で打ち切る break文(第17章)や continue文(第17章)もあります。break文は、ループを続ける条件が満たされているかどうかに関わらず、強制的にループ構造から抜け出します。continue文は、現在の周回だけを切り上げます。
C++ では、上記の「C言語の場合」に挙げたすべての機能が使えるほか、範囲for文が追加されています。範囲for文は、データの集まりを先頭から末尾まで順次アクセスする処理を、簡潔に記述できます。
int a[N];
// for文の場合
for (int i = 0; i < N; ++i) {
[i] = 100;
a}
// 範囲for文の場合
for (int& r : a) {
= 100;
r }
範囲for文は、対象が配列である必要がなく、連結リストのように複数のデータをもった構造に対して、同じように使えます。
std::list<int> lst; // 連結リスト
for (auto& r : lst) {
= 100;
r }
このように、対象のデータの集まりがどんなものであるかに関わらず、同一の構文が使えるようになっています。イテレータと呼ばれる、要素を辿る仕組みが、この共通化を実現させています。
Programming Place Plus のトップページへ
はてなブックマーク に保存 | Pocket に保存 | Facebook でシェア |
X で ポスト/フォロー | LINE で送る | noteで書く |
RSS | 管理者情報 | プライバシーポリシー |