74 / 90

C++ Range-based for Loop

C++ Range-based for sikli

C++ 11 diapazonli for siklini taqdim etdi. Ushbu for sikli massivlar va vektorlar kabi to'plamlar uchun maxsus ishlatiladi.

Masalan,

example.cpp
// int massivini ishga tushiring
int num[3] = {1, 2, 3};

// Ranged for loop va yuklash
for (int var : num) {
    // kod
}

Bu yerda diapazonli for sikli boshidan oxirigacha massiv numni takrorlaydi. int o'zgaruvchisi var har bir iteratsiyada massiv elementining qiymatini saqlaydi.

Uning sintaksisi,

example.cpp
for (rangeDeclaration : rangeExpression) {
    // kod
}

Yuqoridagi misolda,

  • rangeDeclaration - int var
  • rangeExpression - son

Working of ranged for loop in C++

Working of Ranged for Loop in C++

1-misol: Massiv yordamida sikl uchun diapazonlangan

example.cpp
#include <iostream>
using namespace std;

int main() {

    // massivni ishga tushirish
    int numArray[] = {1, 2, 3, 4, 5};

    // massivni chop etish uchun intervalli for loop va yuklash
    for (int n : numArray) {
        cout << n << " ";
    }
  
    return 0;
}

Chiqish

kod
1 2 3 4 5

Ushbu misolda biz numArray nomli int massivini e'lon qildik va ishga tushirdik. Bu erda biz numArray elementlarini chop etish uchun diapazonli for siklidan foydalandik.

-birinchi iteratsiya - n massivning birinchi a'zosining qiymatini oladi, bu 1

  • ikkinchi iteratsiya - n 2 qiymatini oladi va keyin chop etiladi
  • ...va hokazo.

[!NOTE] Diapazonli for sikli massivni boshidan oxirigacha avtomatik ravishda takrorlaydi. Biz sikldagi takrorlanishlar sonini ko'rsatishimiz shart emas.

2-misol: C++ Vektor yordamida sikl uchun diapazonli

example.cpp
#include <iostream>
#include <vector>
using namespace std;

int main() {

    // vektorni e'lon qilish va ishga tushirish
    vector<int> num_vector = {1, 2, 3, 4, 5};

    // vektor elementlarini chop etish
    for (int n : num_vector) {
        cout << n << " ";
    }
  
    return 0;
}

Chiqish

kod
1 2 3 4 5

3-misol: Loop ichida to'plamni e'lon qilish

example.cpp
#include <iostream>

using namespace std;

int main() {

    // to'plamni siklning o'zida aniqlang
    for (int n : {1, 2, 3, 4, 5}) {
        cout << n << " ";
    }

    return 0;
}

Chiqish

kod
1 2 3 4 5

Bu erda biz to'plamni siklning o'zida e'lon qildik, ya'ni.

example.cpp
rangeExpression = {1, 2, 3, 4, 5}

Bu, shuningdek, diapazonli for siklidan foydalanishning to'g'ri usulidir va u biz haqiqiy massiv yoki vektorni ishlatganimizdek ishlaydi.

Loop eng yaxshi amaliyotlari uchun C++ Ranged

Yuqoridagi misollarda biz for siklida to'plamning har bir elementini har bir iteratsiyada saqlash uchun o'zgaruvchini e'lon qildik.

example.cpp
int num[3] = {1, 2, 3};

// 
for (int var : num) {
    // kod
}

Biroq, diapazonli for loopini quyidagicha yozish yaxshidir:

example.cpp
// num elementlarining xotira joyiga kirish
for (int &var : num) {
    // kod
}

Var.dan oldin & dan foydalanishga e'tibor bering. Bu yerga,

-int var : num - numning har bir elementini har bir iteratsiyada o'zgaruvchiga ko'chiradi. Bu kompyuter xotirasi uchun yaxshi emas. -int &var : num - num ning har bir elementini var ga ko'chirmaydi. Buning o'rniga num elementlariga bevosita numning o'zidan kiradi. Bu samaraliroq.

[!NOTE] & operatori mos yozuvlar operatori sifatida tanilgan. Bu haqda C++ pointers da ko'proq bilib olamiz.

Working of address pointing in C++ ranged for loop

Working of Address Pointing in Ranged for Loop in C++

[!NOTE] Agar biz sikl ichida massiv/vektor/to‘plamni o‘zgartirmasak, diapazon deklaratsiyasida const kalit so‘zidan foydalangan ma’qul. // to'plam for siklida o'zgartirilmagan (const int &var : num) { // kod }