Instrução for com base em intervalo (C++)
Executa statement repetidamente e em sequência para cada elemento em expression.
for ( for-range-declaration : expression )
statement
Comentários
Use a instrução for baseada em intervalo para construir loops que devem ser executados por meio de um "intervalo", que é definido como qualquer coisa pela qual é possível iterar - por exemplo, std::vector ou qualquer outra sequência STL cujo intervalo é definido por begin() e end(). O nome que é declarado na parte for-range-declaration é local para a instrução for e não pode ser declarado novamente em expression ou em statement. Observe que a palavra-chave auto é preferencial na parte for-range-declaration da instrução.
Este código mostra como usar loops for com intervalo para iterar por uma matriz e um vetor:
// 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 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 é o 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
Um loop for baseado em intervalo termina quando um destes itens em statement é executado: um break, return ou goto para uma instrução rotulada fora do loop for baseado em intervalo. Uma instrução continue em um loop for baseado em intervalo termina apenas a iteração atual.
Lembre-se destes fatos sobre a instrução for baseada em intervalo:
Reconhece matrizes automaticamente.
Reconhece os contêineres que têm .begin() e .end().
Usa a pesquisa dependente de argumentos begin() e end() para qualquer outra coisa.