Istruzione for basata su intervallo (C++)

 

Data di pubblicazione: aprile 2016

Per la documentazione più recente di Visual Studio 2017 RC, vedere Documentazione di Visual Studio 2017 RC.

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

  
      for ( for-range-declaration : expression )  
   statement   

Utilizzare all'istruzione basata su intervalli for per costruire i cicli che devono essere eseguite tramite un "intervallo", definito come qualcosa che sia possibile iterare—ad esempio std::vector o qualsiasi altra sequenza STL, la cui portata è definita da begin() e end(). Il nome che è dichiarato nella parte for-range-declaration è locale all'istruzione for e non può essere dichiarato nuovamente in expression o statement. Si noti che la parola chiave auto è preferibile nella parte dell'istruzione for-range-declaration .

Questo codice mostra come utilizzare un ciclo ad intervalli for 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 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;  
}  
  

L'output è il seguente:

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 intervallo for termina quando una di queste statement viene eseguita: break, return, o goto ad un'istruzione con etichetta esterna al ciclo basato su intervallo for. Un'istruzione continue in un ciclo basato su intervallo for termina solo l'iterazione corrente.

Ricordarsi questi concetti relativi al ciclo basato su intervallo for:

  • Riconosce automaticamente gli array.

  • Riconosce i contenitori che hanno .begin() e .end().

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

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

Mostra: