Compartilhar via


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.

Consulte também

Referência

Palavra-chave auto (dedução de tipo)

Instruções de iteração (C++)

Palavras-chave C++

Instrução while (C++)

Instrução do-while (C++)

Instrução for (C++)