Voici une autre réponse que personne ne semble avoir encore trouvée. for
les boucles doivent être utilisées lorsque vous devez parcourir une séquence . L'utilisation !=
est la méthode la plus concise pour énoncer la condition de fin de la boucle. Cependant, l'utilisation d'un opérateur moins restrictif est un idiome de programmation défensive très courant. Pour les entiers, cela n'a pas d'importance - c'est juste un choix personnel sans exemple plus spécifique. Boucler les collections avec les itérateurs que vous souhaitez utiliser !=
pour les raisons que d'autres ont indiquées. Si vous envisagez des séquences de float
ou double
, alors vous voulez éviter !=
à tout prix.
Ce que je voulais souligner, c'est qu'il for
est utilisé lorsque vous avez besoin d'itérer sur une séquence. La séquence générée a un point de départ, un intervalle et une condition de fin. Ceux-ci sont spécifiés de manière concise dans la for
déclaration. Si vous vous trouvez soit (1) n'incluant pas la partie étape du for
ou (2) spécifiant quelque chose comme true
la condition de garde, alors vous ne devriez pas utiliser de for
boucle!
La while
boucle est utilisée pour poursuivre le traitement lorsqu'une condition spécifique est remplie. Si vous ne traitez pas une séquence, vous voudrez probablement une while
boucle à la place. Les arguments de la condition de garde sont similaires ici, mais la décision entre a while
et une for
boucle doit être très consciente. La while
boucle est sous-estimée dans les cercles C ++ IMO.
Si vous for
traitez une collection d'éléments (une utilisation très courante en boucle), vous devriez vraiment utiliser une méthode plus spécialisée. Malheureusement, std::for_each
c'est assez douloureux en C ++ pour un certain nombre de raisons. Dans de nombreux cas, séparer le corps d'une for
boucle dans une fonction autonome (bien que quelque peu douloureuse) donne une solution beaucoup plus propre. Lorsque l'on travaille avec des collections, pensez std::for_each
, std::transform
ou std::accumulate
. La mise en œuvre de nombreux algorithmes devient concise et limpide lorsqu'elle est exprimée de cette manière. Sans oublier que l'isolement du corps de la boucle dans une fonction / méthode séparée vous oblige à vous concentrer sur l'algorithme, ses exigences d'entrée et ses résultats.
Si vous utilisez Java, Python, Ruby ou même C ++ 0x , vous devez alors utiliser une boucle foreach de collecte appropriée . Au fur et à mesure que les compilateurs C ++ implémentent cette fonctionnalité, un certain nombre de for
boucles disparaîtront, tout comme ces types de discussions.
int i = 10; while(i --> 0) { /* stuff */ }