C++におけるforループの動作の変更
メニューを表示するにはスワイプしてください
C++の従来型forループは、値の範囲を効率的かつ表現力豊かに反復処理する方法ですが、ループに対してより詳細な制御が必要となる場合もあります。本章では、forループの動作を修正・調整するためのさまざまな手法を紹介します。
初期化、条件式、反復処理文のカスタマイズ
まず重要なのは、forループ構造内の3つの要素はいずれも必須ではないという点です。それぞれを省略することができ、次のようなコードになります。
for.h
1234for (;;) { }
驚くべきことに、これでも動作します。この構文は無限ループを作成し、コンピュータの電源が入っている限り、内部のコードが永遠に実行されます。これを利用すれば、forループを使ってさまざまな目的を達成できます。
forループで複数の変数を初期化
配列の先頭と末尾の両方から同時に走査する必要がある場合に便利です。例えば、単語が回文かどうかを確認する際に役立ちます。
main.cpp
123456789101112#include <iostream> int main() { std::string word = "radar"; for (int i = 0, j = word.length() - 1; i < j; ++i, --j) if (word[i] != word[j]) return 0; // Mismatch found std::cout << "The word is palindrome!"; }
複数の変数をカンマで区切って初期化可能。これにより、ループに入る前に複数の変数を宣言および初期化できる。
forループにおける条件式のさまざまな使い方
forループでは複数の条件式を使用でき、ループの実行が複数の要素に依存する複雑なケースに対応可能。例えば、インデックスの上限と外部フラグの両方に基づいてループを終了させることができる。
main.cpp
1234567891011121314151617181920#include <iostream> int main() { // Simulated temperature readings (in Celsius) int size = 8; int temperatures[size] = {25, 27, 30, 33, 36, 40, 38, 42}; // Threshold for critical temperature const int criticalTemperature = 40; bool safe = true; // Temperatures until all are processed or a critical temperature is found for (int i = 0; i < size && safe; i++) if (temperatures[i] >= criticalTemperature) safe = false; // Stop loop if (!safe) std::cout << "The critical temperature was reached!"; }
forループの条件式には、さまざまな構造を設定可能。プログラムの論理や要件に最適な条件式を選択。各手法により、ループ動作の柔軟な制御が可能。
カスタムまたは複数の更新の利用
forループ内でカスタムまたは複数の更新を行うことで、ループ変数を動的に変更したり、標準的な単一のインクリメントやデクリメントを超えた複雑な更新が可能。要素のスキップ、複数範囲の走査、条件付き更新など、ループの流れを柔軟に制御したい場合に有用。
main.cpp
12345678910#include <iostream> int main() { int size = 8; int values[size] = {1, 2, 3, 4, 5, 6, 7, 8}; for (int i = 0; i < size; i += 2) std::cout << "Value: " << values[i] << std::endl; }
複数の更新文をカンマで区切って使用可能。カスタムまたは複数の更新を利用することで、ループ制御変数をより柔軟に管理でき、プログラムの特定の要件にループを適応可能。
フィードバックありがとうございます!
AIに質問する
AIに質問する
何でも質問するか、提案された質問の1つを試してチャットを始めてください