Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Exécute statement de manière répétée et séquentielle pour chaque élément dans expression.
Syntaxe
for (for-range-declaration:expression)
instruction
Notes
Utilisez l’instruction for basée sur la plage pour construire des boucles qui doivent s’exécuter au moyen d’une plage, définie comme tout ce que vous pouvez itérer à travers, par exemple, std::vector ou toute autre séquence de bibliothèque C++ Standard dont la plage est définie par un begin() et un end(). Le nom déclaré dans la partie for-range-declaration est local dans l’instruction for et ne peut pas être redéclaré dans expression ou statement. Notez que le mot clé auto est préféré dans la partie for-range-declaration de l’instruction.
Nouveautés dans Visual Studio 2017 : les boucles for basées sur une plage ne nécessitent plus que begin() et end() retournent des objets du même type. Ainsi, end() peut retourner un objet sentinel, à l’image de ceux utilisés par les plages définies selon la proposition Ranges-V3. Pour plus d’informations, consultez Généralisation de la boucle For basée sur la plage et Bibliothèque range-v3 sur GitHub.
Ce code montre comment utiliser des boucles for basées sur 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 for basée sur une plage s’achève lorsque l’une de celles dans statement est exécutée : un break, return ou goto vers une instruction étiquetée en dehors de la boucle for basée sur la plage. Une instruction continue, dans une boucle for basée sur la plage, termine uniquement l’itération en cours.
Gardez à l’esprit ces faits sur ces for basés sur la plage :
Reconnaît automatiquement les tableaux.
Reconnaît les conteneurs possédant
.begin()et.end().Utilise la recherche
begin()dépendante des arguments etend()pour tout autre chose.
Voir aussi
auto
Instructions d’itération
Mots clés
Instruction while (C++)
Instruction do-while (C++)
Instruction for (C++)