C ++ برای حلقه


In در حین و انجام در حالی که حلقه ها باید عملیات افزایش یا کاهش را بنویسیم تا بعد از مدتی حلقه را بشکنیم. ولی در for حلقه ما یک گزینه افزایش یا کاهش در خارج از بدن حلقه داریم. همچنین for حلقه ها گزینه اولیه سازی متغیر را دارند. بنابراین نیازی به نوشتن هر مرحله افزایش یا کاهش در داخل حلقه نیست مانند آنچه که ما انجام می دهیم و حلقه های do برای حلقه مانند زیر است.

نحو For Loop

for (initialization; termination; increment-decrement) 
    statement

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

دهی اولیه: همانطور که حلقه شروع می شود ، بیان یک بار اجرا می شود. این عبارت شروع به حلقه می کند.

ختم: اگر مقدار عبارت خاتمه برابر با false باشد ، حلقه خاتمه می یابد.

افزایش-کاهش: با هر تکرار این عبارت اجرا می شود. این عبارت می تواند مقدار را کم یا زیاد کند.

برای مثالهای حلقه

امتحان کنید

#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 (;;) 
{
    statement(s)
}

حلقه فوق برای همیشه اجرا می شود و برابر است با
while (true) 
{
    statement(s)
}

ما همچنین می توانیم یک حلقه for را بدون عبارت Initialization و Increment-Decrement بنویسیم همانطور که در زیر نشان داده شده است
int i = 0;
for ( ; i < 10; )
{
    cout << i << " ";
    i++;
}

خروجی کد بالا خواهد بود

0  1  2  3  4  5  6  7  8  9

ما همچنین می توانیم یک حلقه for را فقط با استفاده از عبارت افزایش-کاهش به شکل زیر بنویسیم

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

خروجی کد بالا خواهد بود

0  1  2  3  4  5  6  7  8  9  10

بیانیه های پوچ

همانطور که در زیر نشان داده شده است می توانید یک حلقه for بدون دستور / s داشته باشید. در این حلقه for مقداردهی اولیه را انجام می دهد ، شرایط Termination و افزایش / کاهش را بررسی می کند و سپس از حلقه خارج می شود.

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

توالی اجرا در حلقه در مراحل زیر نشان داده شده است

step1: انجام مقداردهی اولیه
step2: شرایط فسخ را بررسی کنید. اگر نادرست است به مرحله 6 بروید
step3: بیانیه ها را اجرا کنید
step4: متغیر افزایش-کاهش
step6: به مرحله 2 بروید
step7: متوقف کردن

در زیر نمودار جریان حلقه وجود دارد

برای حلقه


مبتنی بر محدوده برای حلقه

استاندارد جدید محدوده ای مبتنی بر حلقه را ارائه می دهد که ساده تر است و می تواند برای جمع آوری عناصر از آن استفاده شود. می تواند به روش زیر نمایش داده شود

for ( range_declaration : range_expression ) statement;

range_expression باید توالی اشیا را نشان دهد begin و end اعضا مانند list , array , vector , string ، و غیره

این بدان معناست که ما می توانیم از همه تکرارکننده ها مانند استفاده کنیم list , array , vector , string ، و غیره در محدوده_ بیان.

range_declaration یک متغیر را تعریف می کند و هر عنصر ناشی از range_expression به نوع این متغیر تبدیل می شود. به عنوان مثال اگر range_declaration باشد char نوع و 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

مثال بیشتر از یک محدوده مبتنی بر حلقه

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';
}

در زیر خروجی از کد بالا است

تو را رها می کنی
تو را رها می کنی
تو را رها می کنی
تو را رها می کنی

پایان دادن به محدوده مبتنی بر حلقه

یک دامنه مبتنی بر حلقه با اجرا خاتمه می یابد break , return و goto دستور داخل بدنه یک حلقه مبتنی بر دامنه. یک عبارت ادامه فقط تکرار فعلی یک حلقه را خاتمه می دهد.

نکات مهم در مورد حلقه For-based

  1. آرایه ها بصورت خودکار توسط حلقه مبتنی بر محدوده شناسایی می شوند.
  2. محدوده مبتنی بر حلقه می تواند ظروف دارای .begin () و .end () را تشخیص دهد.
  3. برای هر چیز دیگری ، حلقه مبتنی بر دامنه از جستجوی وابسته به استدلال شروع () و پایان () استفاده می کند.