logo

Bucle for basado en rango en C++

En este tema, analizaremos el bucle for basado en rangos en el lenguaje de programación C++. El lenguaje C++ introdujo un nuevo concepto de bucle for basado en rangos en C++ 11 y versiones posteriores, que es mucho mejor que el bucle For normal. Un bucle for basado en rangos no requiere una gran codificación para implementar la iteración del bucle. Es un iterador secuencial que itera cada elemento del contenedor en un rango (de principio a fin).

Bucle for basado en rango en C++

Sintaxis

 for (range_declaration : range_expression ) loop statement 
    declaración_rango:Se utiliza para declarar una variable cuyo tipo es el mismo que los tipos de los elementos recopilados representados por range_expression o referencia a ese tipo.rango_expresión:Define una expresión que representa la secuencia adecuada de elementos.declaración de bucle:Define el cuerpo del bucle for basado en rango que contiene una o más declaraciones que se ejecutarán repetidamente hasta el final de la expresión de rango.

Nota: Si no conocemos el tipo de datos de los elementos del contenedor, podemos usar la palabra clave auto que identifica automáticamente el tipo de datos de range_expression.

Programa para imprimir cada elemento de la matriz usando un bucle for basado en rango

Consideremos un ejemplo para imprimir la matriz int y double usando el bucle for basado en rango en C++.

programa.cpp

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

Producción

 10 20 30 40 50 2.4 4.5 1.5 3.5 4.0 

Programa para demostrar el vector en rango basado en bucle

Escribamos un programa simple para implementar el vector en rango basado en bucle.

Programa2.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; } 

Producción

 5 10 25 20 25 

Programa para imprimir los arreglos usando un bucle for basado en rango en C++ con referencia

Consideremos un ejemplo para imprimir los elementos de la matriz usando un bucle for basado en rango en C++.

emitir una cadena a int java

Programa3.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; } 

Producción

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

Bucle for anidado basado en rango

Cuando un bucle se define dentro del cuerpo de otro bucle, el bucle se denomina bucle for anidado. De manera similar, cuando definimos un rango en un bucle dentro de otro bucle basado en rangos, la técnica se conoce como bucle for anidado basado en rangos.

Sintaxis:

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

En la sintaxis anterior, definimos un bucle for basado en rango dentro de otro bucle. Aquí llamamos bucle for interno y externo basado en rango en C++.

Programa para imprimir el bucle for anidado basado en rangos en C++

Considere un ejemplo para demostrar el rango anidado basado en bucle for en el lenguaje de programación C++.

zorro o lobo

Rango.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; } 

Producción

 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 

¿Cuál es la diferencia entre el bucle for tradicional y el bucle for basado en rango?

A bucle tradicional se utiliza para ejecutar repetidamente el bloque de código hasta que la condición especificada sea verdadera. Un bucle for tradicional tiene tres parámetros, inicialización de la variable, especificar la condición y el último es el contador que se incrementa en uno si la condición sigue siendo verdadera.

Sintaxis:

 for ( variable_initialization; specify_condition; updated_counter) { // statement to be executed; } 

Bucle basado en rango

Por otro lado, tenemos un nuevo bucle for basado en rangos disponible en C++ 11 y versiones posteriores. Tiene dos parámetros, declaración de rango y expresión range_. También se utiliza para ejecutar repetidamente el bloque de código en un rango.

Sintaxis

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

La declaración de rango se utiliza para declarar el tipo de variable relacionada con la expresión de rango (contenedor). La expresión_rango: es como un contenedor que contiene los mismos tipos de elementos de manera secuencial. loop_statement define la declaración que se ejecuta dentro del bucle for.

Ventajas del bucle for basado en rango

  1. Es fácil de usar y su sintaxis también es sencilla.
  2. Un bucle for basado en rango no requiere el cálculo del número de elementos en un contenedor
  3. Reconoce los elementos iniciales y finales de los contenedores.
  4. Podemos modificar fácilmente el tamaño y elementos del contenedor.
  5. No crea ninguna copia de los elementos.
  6. Es mucho más rápido que el bucle for tradicional.
  7. Por lo general, utiliza la palabra clave auto para reconocer el tipo de datos de los elementos del contenedor.

Desventaja del bucle for basado en rango

  1. No puede atravesar una parte de una lista.
  2. No se puede utilizar para atravesar en orden inverso.
  3. No se puede utilizar en punteros.
  4. No ofrece indexar los elementos actuales.