break; C++: quelle boucle est-il en train de tomber
simple question concernant le code C++:
for(int i=0;i<npts;i++)
{
for(int j=i;j<2*ndim;j++)
{
if(funcEvals[i]<bestListEval[j])
{
bestListEval[j] = funcEvals[i];
for(int k=0;k<m_ndim;k++)
bestList[j][k] = simplex[i][k];
break;
}
}
}
Je veux m'assurer que
- Chaque ligne de
double **simplex
est inséré au plus une fois dansdouble **bestList
- L'instance de
break
ici éclate de la seconde (intérieure)for
boucle.
Est-ce le cas?
Oui, c'est sortir de la seconde
Pause toujours les sauts les plus intimes de la boucle. Si vous voulez sortir de plus que ce que vous avez besoin d'avoir un bool ou quelque chose à garder une trace de quand de continuer ou pas.
Le
Ajout de "C" tag depuis que la question est pertinente pour le C et le code est écrit en C.
for
boucle.break
toujours éclate de l'intérieur de la structure en boucle (ou switch
) actif à ce point dans le code (dans ce cas, le for (j ...
boucle).Pause toujours les sauts les plus intimes de la boucle. Si vous voulez sortir de plus que ce que vous avez besoin d'avoir un bool ou quelque chose à garder une trace de quand de continuer ou pas.
Le
break
déclaration sera TOUJOURS le cas si funcEvals[i]<bestListEval[j]
est true
. Vous devriez vraiment utiliser certains des meilleurs noms de variables.Ajout de "C" tag depuis que la question est pertinente pour le C et le code est écrit en C.
OriginalL'auteur octoback | 2012-05-14
Vous devez vous connecter pour publier un commentaire.
L'instruction break en C++ va sortir de la pour ou instruction switch dans lequel la rupture est directement placé. Il casse les recoins les plus profonds de la structure en boucle (ou commutateur). Dans ce cas:
Il n'existe aucun moyen en C++ pour avoir briser la cible de tout autre boucle. Afin de sortir de parent de boucles vous avez besoin d'utiliser un autre mécanisme indépendant comme le déclenchement de la condition de fin.
Aussi, si vous voulez sortir de plus d'un intérieur de la boucle, vous pouvez extraire que les boucles dans une fonction. En C++ 11 lambdas peut être utilisé pour le faire en-place - donc il n'y aura pas besoin d'utiliser goto.
goto
peut souvent être utilisé pour briser les autres boucles.Je trouve ça plus pratique à mettre ce genre de chose dans une fonction appelée quelque chose comme
findFirstElemThatXYZ
et puis revenir quand je le trouve.OriginalL'auteur Sergey K.
La
break
déclaration en C++ va sortir de lafor
ouswitch
déclaration, dans laquelle lesbreak
est directement placé. Dans ce cas, il va sortir de lafor (int j = ...
boucle.Il n'existe aucun moyen en C++ pour avoir
break
cible toute autre boucle. Afin de sortir de parent de boucles vous avez besoin d'utiliser un autre mécanisme indépendant comme le déclenchement de la condition de fin.réglage
i=npts
pour briser la boucle est source de confusion, utiliser un booléen à la place.mon exemple est conçu pour être minimalement invasive pour l'OP de l'échantillon.
OriginalL'auteur JaredPar
Vous sortir de votre deuxième boucle de votre première boucle.
Vous pouvez définir une valeur booléenne en haut
et quand vous écrivez pause, écrire
Puis à la fin de votre boucle, vérifier à chaque fois,
OriginalL'auteur Martol1ni
Vous pouvez définir une valeur booléenne en haut
et quand vous voulez briser l'autre en boucle, écrire
OriginalL'auteur kalpani thakshila
À l'aide de
break
break
va sortir de la quelle que soit la répétition ou de l'itération de la boucle qu'il est actuellement à l'intérieur d'. Ce bavard de l'image guide vise à mettre en évidencebreak
dans le comportement, pas d'illustrer les bonnes pratiques de codage. L'intérieur de la boucle aurait suffi, mais comme je l'ai dit, c'est à des fins visuelles:Alternative Conseils
Utiliser C++Moderne's divers algorithmes de recherche disponibles dans
<algorithm>
à la recherche par le biais de conteneurs et, dans une certaine mesure, des chaînes de caractères. La raison en est double:Ces code-échantillons ont besoin de la même chaudière-plaque, à l'exception de
<algorithm>
pour les plus âgés pour la boucle de recherche:La façon moderne serait quelque chose comme ceci, où nous nous sommes rapidement de recherche à travers le contenant, et si la recherche itérateur n'est pas à la fin du conteneur (pas le dernier élément), nous savons la valeur de la recherche est situé.
Ce code permet d'obtenir le même résultat avec moins de lignes et risque moins de points de défaillance de code écrit par l'utilisateur, comme les anciens alternatives ci-dessous.
Moderne de style C++
C++11 gamme à base de boucle
De la vieille école, C-style-boucle:
OriginalL'auteur kayleeFrye_onDeck
Si vous n'avez pas parenthesizes après
if/else/while/for
seule la première ligne suivanteif/else/for/while
à l'exécution, de sorte boucle suivante:serait seulement de la boucle si la ligne suivante:
ainsi, le
break
déclaration peu après, ne serait pas l'effet d'une quelconque manière. Si vous considérez quebreak;
est utilisé pour rompre les boucles et les instructions de commutation, ainsibreak
déclaration serait appliquée:OriginalL'auteur Gox