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::vector
ou 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
, return
ou 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 for
plage :
Reconnaît automatiquement les tableaux.
Reconnaît les conteneurs qui ont
.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++)
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour