Istruzione for basata su intervallo (C++)

Esegue statement ripetutamente e in sequenza per ogni elemento in expression.

Sintassi

for ( for-range-declaration:espressione)
statement

Osservazioni:

Usare l'istruzione basata sull'intervallo for per costruire cicli che devono essere eseguiti attraverso un intervallo, definito come qualsiasi elemento che è possibile scorrere, ad esempio , std::vectoro qualsiasi altra sequenza di libreria standard C++ il cui intervallo è definito da un begin() oggetto e end(). Il nome dichiarato nella for-range-declaration parte è locale per l'istruzione for e non può essere nuovamente dichiarato in expression o statement. Si noti che la auto parola chiave è preferibile nella for-range-declaration parte dell'istruzione .

Novità di Visual Studio 2017: i cicli basati su for intervalli non richiedono più che begin() gli oggetti restituiti end() dello stesso tipo. In questo modo è possibile end() restituire un oggetto sentinel, ad esempio usato da intervalli, come definito nella proposta Ranges-V3. Per altre informazioni, vedere For basato su intervalli e della libreria range-v3 in GitHub.

Questo codice illustra come usare cicli basati su for intervalli per scorrere una matrice e un vettore:

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

Ecco l'output:

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 ciclo basato su for intervallo termina quando viene eseguito uno di questi in statement : un breakoggetto , returno goto a un'istruzione etichettata all'esterno del ciclo basato sull'intervallo for . Un'istruzione continue in un ciclo basato su for intervallo termina solo l'iterazione corrente.

Tenere presenti questi fatti relativi all'intervallo for:

  • Riconosce automaticamente le matrici.

  • Riconosce i contenitori con .begin() e .end().

  • Utilizzare la ricerca dipendente dall'argomento begin() e end() per altri scopi.

Vedi anche

auto
Istruzioni di iterazione
Parole chiave
while Istruzione (C++)
do-while Istruzione (C++)
for Istruzione (C++)