C ++ Forループ


In while 及び 一方を行います ループしばらくするとループを中断するために、インクリメントまたはデクリメント操作を記述する必要があります。 しかし、 for ループループ本体の外側でインクリメントまたはデクリメントするオプションがあります。 また for ループには、変数を初期化するオプションがあります。 したがって、whileループやdo…whileループのように、ループ本体内にインクリメント/デクリメントステップを記述する必要はありません。 forループは次のようになります。

Forループの構文

for (initialization; termination; increment-decrement) 
    statement

OR
for (initialization; termination; increment-decrement) 
{
    statement(s)
}

初期化:ループが開始すると、初期化式がXNUMX回実行されます。 この式はループを初期化します。

終了:終了式の値がfalseに等しい場合、ループは終了します。

インクリメント-デクリメント:反復ごとに、この式が実行されます。 この式は、値をインクリメントまたはデクリメントできます。

forループの例

それを試してみてください

#include <iostream> 
using namespace std;
int main()
{
for (int i = 0; i < 5; i++)
	cout << "i is " << i << endl; 
return 0;
}

ここに int i = 0 初期化です
i < 5 終了条件です
i++ 変数の値を1ずつインクリメントして変更します
cout << " i is " << i << endl; 私が5になるまで実行されます

上記のコードの出力は次のようになります

私は0です
私は1です
私は2です
私は3です
私は4です

初期化、終了、インクリメントなしのForループ-デクリメント

初期化、終了、およびインクリメント-デクリメント式はオプションです。 持つことが可能です for 以下に示すようにループします。

for (;;) 
{
    statement(s)
}

上記のループは永久に実行され、同等です
while (true) 
{
    statement(s)
}

以下に示すように、初期化およびインクリメント-デクリメント式なしでforループを作成することもできます。
int i = 0;
for ( ; i < 10; )
{
    cout << i << " ";
    i++;
}

上記のコードの出力は次のようになります

0  1  2  3  4  5  6  7  8  9

以下に示すように、Increment-Decrement式のみを使用してforループを作成することもできます。

int i = 0;
for ( ; ; i++)
{
    cout << i << " ";  
    if(i==10)
        break;
}

上記のコードの出力は次のようになります

0  1  2  3  4  5  6  7  8  9  10

ヌルステートメント

以下に示すように、ステートメントなしでforループを作成することができます。 この場合、forループは初期化を実行し、終了条件とインクリメント/デクリメント操作をチェックしてから、ループを終了します。

for(int i=0; i < 10; i++);

上記のループは10回実行され、その後終了します。 終了前のiの値は10になります

Forループに関する高度な詳細

初期化:これは、同じ型の複数の変数宣言を含む可能性のある単一の式です。 2つの変数を宣言する場合は、次のようにカンマで区切って記述してください。 int i=0, j=0 しかし、セミコロンが次のように区切られているわけではありません int i=0; int j=0。 また、あなたはのように書くことはできません int i=0, float j=0.

終了:ここでは、複数の終了条件を記述できますが、最後の条件のみが有効になり、前の条件は無視されます。 例えば b > 5, a < 10 b > 5 無視されます a < 10 有効な終了条件になります。

インクリメント-デクリメント:ここでも、で区切られた複数のインクリメント/デクリメント操作を記述できます。 ,.

以下は、上記の機能を実装するコードです

int main ()
{   
   for( int a = 1, b = 10, c = 1 ; a < 10; a = a + 1, b = b - 1, c = c * 2 )
   {
       cout << "value of a: " << a << endl;
       cout << "value of b: " << b << endl;
       cout << "value of c: " << c << endl;
   } 
   return 0;
}

上記のコードの出力を以下に示します

aの値:1
bの値:10
cの値:1
aの値:2
bの値:9
cの値:2
aの値:3
bの値:8
cの値:4
aの値:4
bの値:7
cの値:8
aの値:5
bの値:6
cの値:16
aの値:6
bの値:5
cの値:32
aの値:7
bの値:4
cの値:64
aの値:8
bの値:3
cの値:128
aの値:9
bの値:2
cの値:256

上記で、初期化式では、同じタイプの複数の変数のみを定義できることを説明しました。 以下では、さまざまな型変数を初期化する方法について説明します。

for(struct { int a; float b; } s = { 0, 0.5 } ; s.a < 5 ; ++s.a, ++s.b) 
{
	cout <<"a="<< s.a << " b=" << s.b << endl;
}

以下は上記のコードの出力です

a = 0 b = 0.5
a = 1 b = 1.5
a = 2 b = 2.5
a = 3 b = 3.5
a = 4 b = 4.5

forループでの実行シーケンスを以下の手順で示します。

Step1:初期化を実行します
Step2:終了条件を確認してください。 間違っている場合は、ステップ6に進みます
Step3:ステートメントの実行
Step4:インクリメント-デクリメント変数
Step6:ステップ2に進みます
Step7: やめる

以下はforループのフローチャートです

ループ


範囲ベースのForループ

新しい標準では、forループに基づく範囲が導入されました。これは、より単純で、要素のコレクションを反復処理するために使用できます。 次のように表すことができます

for ( range_declaration : range_expression ) statement;

range_expressionは、次のオブジェクトのシーケンスを表す必要があります。 begin 及び end のようなメンバー list , array , vector , string などです。

つまり、次のようなすべてのイテレータを使用できます。 list , array , vector , string range_expressionのなど。

range_declarationは変数を定義し、range_expressionからの各要素はこの変数の型に変換されます。 たとえば、range_declarationが char typeとrange_expressionは string タイプすると、各要素はに変換されます char タイプし、以下に示すように変数に割り当てられます。

「szName」からの各要素はに変換されます char タイプしてから変数「ch」に割り当てます。

int main ()
{
    string szName = "TutorialCup";
    for(char ch : szName)
    {
        cout << ch << endl;
    }

    return 0;
}

上記のコードの出力を以下に示します

T
u
t
o
r
i
a
l
C
u
p

forループに基づく範囲のその他の例

int main() 
{
    string szName = "TutorialCup";
    for (const char &ch : szName) // access by const reference
        cout << ch << ' ';
    cout << '\n';
    
    for (auto ch : szName) // access by value, the type of ch is ch
        cout << ch << ' ';
    cout << '\n';
 
    for (auto&& ch : szName) // access by reference, the type of ch is char&
        cout << ch << ' ';
    cout << '\n';
 
    for(char ch : {'T','u','t','o','r','i','a','l','C','u','p'}) // the initializer may be a braced-init-list
        cout << ch << ' ';
    cout << '\n';
}

以下は上記のコードからの出力です

T u t o r i a l C u p
T u t o r i a l C u p
T u t o r i a l C u p
T u t o r i a l C u p

範囲ベースのForループの終了

範囲ベースのforループは、実行することで終了します break , return 及び goto 範囲ベースのループの本体内のステートメント。 継続ステートメントは、ループの現在の反復のみを終了します。

範囲ベースのForループに関する重要なポイント

  1. 配列は、範囲ベースのforループによって自動的に認識されます。
  2. 範囲ベースのforループは、.begin()と.end()を持つコンテナーを認識できます。
  3. それ以外の場合、範囲ベースのforループは、引数に依存するルックアップbegin()とend()を使用します。