logo

Цикл for на основі діапазону в C++

У цій темі ми обговоримо цикл for на основі діапазону в мові програмування C++. Мова C++ представила нову концепцію циклу for на основі діапазону в C++11 і пізніших версіях, яка є набагато кращою, ніж звичайний цикл For. Цикл for на основі діапазону не вимагає великого кодування для реалізації ітерації циклу for. Це послідовний ітератор, який повторює кожен елемент контейнера в діапазоні (від початку до кінця).

Цикл for на основі діапазону в C++

Синтаксис

 for (range_declaration : range_expression ) loop statement 
    оголошення_діапазону:Він використовується для оголошення змінної, тип якої збігається з типами зібраних елементів, представлених виразом діапазону або посиланням на цей тип.діапазон_виразу:Він визначає вираз, який представляє відповідну послідовність елементів.оператор циклу:Він визначає тіло циклу for на основі діапазону, який містить одну або більше інструкцій, які потрібно багаторазово виконувати до кінця виразу діапазону.

Примітка. Якщо ми не знаємо тип даних елементів контейнера, ми можемо використати ключове слово auto, яке автоматично визначає тип даних діапазону_виразу.

Програма для друку кожного елемента масиву з використанням діапазону на основі циклу for

Давайте розглянемо приклад друку масиву int і double за допомогою циклу for на основі діапазону в C++.

program.cpp

генерувати випадкове число в java
 #include using namespace std; int main () { int arr1 [5] = { 10, 20, 30, 40, 50}; double darr [5] = { 2.4, 4.5, 1.5, 3.5, 4.0 }; // use range based for loop for ( const auto &var : arr1 ) { cout << var << ' ' ; } // use auto keyword to automatically specify the data type of darr container. for ( const auto &var : darr ) { cout << var << ' ' ; } return 0; } 

Вихід

 10 20 30 40 50 2.4 4.5 1.5 3.5 4.0 

Програма для демонстрації вектора в діапазоні на основі циклу for

Давайте напишемо просту програму для реалізації вектора в діапазоні на основі циклу for.

Program2.cpp

 #include #include using namespace std; int main() { int x; // declare integer variable // declare vector variable vector vect = {5, 10 , 25, 20, 25}; // display vector elements for ( int x : vect) { cout << x << ' '; } return 0; } 

Вихід

 5 10 25 20 25 

Програма для друку масивів за допомогою циклу for Range на основі C++ із посиланням

Давайте розглянемо приклад друку елементів масиву за допомогою циклу for на основі діапазону в C++.

Program3.cpp

 #include #include #include using namespace std; int main(){ array data = {1, 3, -2, 4, 6, 7, 9}; cout << ' Before updating the elements: ' << endl; for (int x : data){ cout << x << ' '; } // pass the references for (int &itemRef : data){ itemRef *= 3; } cout << endl << ' After modification of the elements: ' << endl; for (int x : data){ cout << x << ' '; } cout << endl; return 0; } 

Вихід

 Before updating the elements: 1 3 -2 4 6 7 9 After modification of the elements: 3 9 -6 12 18 21 27 

Вкладений цикл for на основі діапазону

Коли цикл визначено всередині тіла іншого циклу, цей цикл називається вкладеним циклом for. Так само, коли ми визначаємо діапазон у циклі всередині іншого циклу на основі діапазону, ця техніка відома як вкладений цикл for на основі діапазону.

віртуальна машина java

Синтаксис:

 for ( int x : range_expression) // outer loop { for ( int y : range_expression) // inner loop { // statement to be executed } // statement to be executed } 

У наведеному вище синтаксисі ми визначаємо один цикл for на основі діапазону всередині іншого циклу. Тут ми називаємо внутрішній і зовнішній цикл for на основі діапазону в C++.

Програма для друку вкладеного циклу for на основі діапазону в C++

Розглянемо приклад, щоб продемонструвати вкладений діапазон на основі циклу for у мові програмування C++.

Range.cpp

 #include using namespace std; int main () { int arr1[4] = { 0, 1, 2, 3 }; int arr2[5] = { 1, 2, 3, 4, 5 }; // use nested range based for loop for ( int x : arr1 ) { // declare nested loop for ( int y : arr2 ) { cout << ' x = ' << x << ' and j = ' << y << endl; } } return 0; } 

Вихід

 x = 0 and j = 1 x = 0 and j = 2 x = 0 and j = 3 x = 0 and j = 4 x = 0 and j = 5 x = 1 and j = 1 x = 1 and j = 2 x = 1 and j = 3 x = 1 and j = 4 x = 1 and j = 5 x = 2 and j = 1 x = 2 and j = 2 x = 2 and j = 3 x = 2 and j = 4 x = 2 and j = 5 x = 3 and j = 1 x = 3 and j = 2 x = 3 and j = 3 x = 3 and j = 4 x = 3 and j = 5 

Яка різниця між традиційним циклом for і циклом for на основі діапазону?

А традиційний цикл for використовується для багаторазового виконання блоку коду, доки задана умова не стане істинною. Традиційний цикл for має три параметри: ініціалізацію змінної, вказівку умови та останній параметр – лічильник, який збільшується на одиницю, якщо умова залишається вірною.

Синтаксис:

скільки міст у нас
 for ( variable_initialization; specify_condition; updated_counter) { // statement to be executed; } 

Цикл на основі діапазону

З іншого боку, у C++ 11 і пізніших версіях доступний новий цикл for на основі діапазону. Він має два параметри: оголошення діапазону та вираз діапазон_. Він також використовується для багаторазового виконання блоку коду в діапазоні.

Синтаксис

 for ( range_declaration : range_ expression ) { loop _statement; // statement to be executed; } 

Оголошення діапазону використовується для оголошення типу змінної, пов’язаної з виразом діапазону (контейнер). Вираз_діапазону: це як контейнер, який містить ті самі типи елементів у послідовному порядку. loop_statement визначає оператор, який виконується всередині циклу for.

Переваги циклу for на основі діапазону

  1. Він простий у використанні, і його синтаксис також простий.
  2. Цикл for на основі діапазону не потребує обчислення кількості елементів у контейнерах
  3. Він розпізнає початкові та кінцеві елементи контейнерів.
  4. Ми можемо легко змінити розмір і елементи контейнера.
  5. Він не створює жодних копій елементів.
  6. Це набагато швидше, ніж традиційний цикл for.
  7. Зазвичай він використовує ключове слово auto для розпізнавання типу даних елементів контейнера.

Недолік циклу for на основі діапазону

  1. Він не може проходити частину списку.
  2. Його не можна використовувати для проходження у зворотному порядку
  3. Його не можна використовувати в покажчиках.
  4. Він не пропонує індексувати поточні елементи.