ループ構造 | Programming Place Plus 用語集

トップページ用語集

名称 🔗

解説 🔗

プログラムにおいて、特定の条件が満たされているあいだ、特定の処理を繰り返す構造(制御構造)のことです。

単にループと呼ぶことも多いですが、同じ処理を繰り返すことを指してループと呼ぶ場合も多くあります。

ループ構造を表現する方法は、プログラミング言語によって異なります。以下は架空のプログラミング言語による例です。

int n;
int sum = 0;

loop (sum < 100) { // 合計が 100未満のあいだ繰り返す(=合計が 100以上になるまで繰り返す)
     n = input();  // 整数の入力を受け取る
     sum += n;     // 合計を求める
}

この例のように、ループを “繰り返す” 条件を指定するようになっていることが多いですが、ループを “終える” 条件を指定するものもあります(つまり、記述する条件の真偽は逆になります)。

C言語の場合

C言語には、ループ構造を構築するために、whilefordo というキーワードがあります。また、(そうするべきではないですが)goto文を使ってループ構造を構築することも可能です(リンクは、それぞれを解説したC言語編のページへ移動します)。

ループを途中で打ち切る break文(第17章)や continue文(第17章)もあります。break文は、ループを続ける条件が満たされているかどうかに関わらず、強制的にループ構造から抜け出します。continue文は、現在の周回だけを切り上げます。

C++ の場合

C++ では、上記の「C言語の場合」に挙げたすべての機能が使えるほか、範囲for文が追加されています。範囲for文は、データの集まりを先頭から末尾まで順次アクセスする処理を、簡潔に記述できます。

int a[N];

// for文の場合
for (int i = 0; i < N; ++i) {
     a[i] = 100;
}

// 範囲for文の場合
for (int& r : a) {
     r = 100;
}

範囲for文は、対象が配列である必要がなく、連結リストのように複数のデータをもった構造に対して、同じように使えます。

std::list<int> lst;  // 連結リスト

for (auto& r : lst) {
     r = 100;
}

このように、対象のデータの集まりがどんなものであるかに関わらず、同一の構文が使えるようになっています。イテレータと呼ばれる、要素を辿る仕組みが、この共通化を実現させています。


参考リンク 🔗

更新履歴 🔗


用語集のトップページへ

Programming Place Plus のトップページへ



はてなブックマーク に保存 Pocket に保存 Facebook でシェア
X で ポストフォロー LINE で送る noteで書く
rss1.0 取得ボタン RSS 管理者情報 プライバシーポリシー
先頭へ戻る