Instrucción for basada en intervalo (C++)
Ejecuta statement
de forma repetida y secuencial para cada elemento de expression
.
Sintaxis
for (
for-range-declaration:
expression)
instrucción
Comentarios
Use la instrucción for
basada en intervalo para construir los bucles que deben ejecutarse en un intervalo, que se define como cualquier elemento que se puede recorrer en iteración; por ejemplo, std::vector
o cualquier otra secuencia de la biblioteca estándar de C++ cuyo intervalo esté definido por begin()
y end()
. El nombre que se declara en la parte for-range-declaration
es local de la instrucción for
y no se puede volver a declarar en expression
o statement
. Tenga en cuenta que es preferible usar la palabra clave auto
en la parte for-range-declaration
de la instrucción.
Novedades de Visual Studio 2017: los bucles for
basados en intervalos ya no necesitan que begin()
ni end()
devuelvan objetos del mismo tipo. Esto permite que end()
devuelva un objeto centinela como el que usan los intervalos tal como se define en la propuesta de intervalos V3. Para obtener más información, consulte Generalización del bucle For
basado en intervalo y la Biblioteca range-v3 en GitHub.
En este código se muestra cómo usar bucles for
basados en intervalos para iterar por una matriz y un vector:
// range-based-for.cpp
// compile by using: cl /EHsc /nologo /W4
#include <iostream>
#include <vector>
using namespace std;
int main()
{
// Basic 10-element integer array.
int x[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
// Range-based for loop to iterate through the array.
for( int y : x ) { // Access by value using a copy declared as a specific type.
// Not preferred.
cout << y << " ";
}
cout << endl;
// The auto keyword causes type inference to be used. Preferred.
for( auto y : x ) { // Copy of 'x', almost always undesirable
cout << y << " ";
}
cout << endl;
for( auto &y : x ) { // Type inference by reference.
// Observes and/or modifies in-place. Preferred when modify is needed.
cout << y << " ";
}
cout << endl;
for( const auto &y : x ) { // Type inference by const reference.
// Observes in-place. Preferred when no modify is needed.
cout << y << " ";
}
cout << endl;
cout << "end of integer array test" << endl;
cout << endl;
// Create a vector object that contains 10 elements.
vector<double> v;
for (int i = 0; i < 10; ++i) {
v.push_back(i + 0.14159);
}
// Range-based for loop to iterate through the vector, observing in-place.
for( const auto &j : v ) {
cout << j << " ";
}
cout << endl;
cout << "end of vector test" << endl;
}
Este es el resultado:
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
end of integer array test
0.14159 1.14159 2.14159 3.14159 4.14159 5.14159 6.14159 7.14159 8.14159 9.14159
end of vector test
Un bucle for
basado en intervalo finaliza cuando se ejecuta uno de estos elementos en statement
: break
, return
o goto
a una instrucción con etiqueta fuera del bucle for
basado en intervalo. Una instrucción continue
en un bucle for
basado en intervalo solo finaliza la iteración actual.
Tenga en cuenta lo siguiente sobre la instrucción for
basada en intervalo:
Reconoce automáticamente las matrices.
Reconoce los contenedores que tienen
.begin()
y.end()
.Utiliza la búsqueda dependiente de argumentos
begin()
yend()
para todo lo demás.
Consulte también
auto
Instrucciones de iteración
Palabras clave
Instrucción while
(C++)
Instrucción do-while
(C++)
Instrucción for
(C++)