Basé sur une plage, instruction (C++)

statement S’exécute de manière répétée et séquentielle pour chaque élément dans expression.

Syntaxe

for (expression for-range-declaration:)
instruction

Notes

Utilisez l’instruction basée sur for la plage pour construire des boucles qui doivent s’exécuter via une plage, qui est définie comme tout ce que vous pouvez itérer ( par exemple, std::vectorou toute autre séquence de bibliothèque standard C++ dont la plage est définie par un begin() et end(). Le nom déclaré dans la for-range-declaration partie est local dans l’instruction for et ne peut pas être réintéclaré dans expression ou statement. Notez que le auto mot clé est préféré dans la for-range-declaration partie de l’instruction.

Nouveautés de Visual Studio 2017 : les boucles basées sur for des plages ne nécessitent plus cela begin() et end() retournent des objets du même type. Cela permet end() de retourner un objet sentinelle tel que utilisé par les plages définies dans la proposition Ranges-V3. Pour plus d’informations, consultez Généralisation de la boucle basée sur For la plage et de la bibliothèque range-v3 sur GitHub.

Ce code montre comment utiliser des boucles basées sur for des plages pour itérer au sein d’un tableau et d’un vecteur :

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

Voici la sortie :

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

Une boucle basée sur for une plage se termine lorsqu’une de ces boucles est statement exécutée : un break, returnou goto vers une instruction étiquetée en dehors de la boucle basée sur for la plage. Une continue instruction d’une boucle basée sur for une plage met fin uniquement à l’itération actuelle.

Gardez à l’esprit ces faits sur la forplage :

  • Reconnaît automatiquement les tableaux.

  • Reconnaît les conteneurs qui ont .begin() et .end().

  • Utilise la recherche begin() dépendante des arguments et end() pour tout autre chose.

Voir aussi

auto
Instructions d’itération
Mots clés
Instruction while (C++)
Instruction do-while (C++)
Instruction for (C++)