¿Es posible usar la breakfunción para salir de varios forbucles anidados ?
Si es así, ¿cómo harías para hacer esto? ¿Puedes controlar también cuántos bucles breaksalen?
c++
for-loop
break
nested-loops
Falso
fuente
fuente

Respuestas:
AFAIK, C ++ no admite bucles de nombres, como lo hacen Java y otros lenguajes. Puede usar un goto o crear un valor de marca que use. Al final de cada ciclo, verifique el valor del indicador. Si se establece en verdadero, puede salir de esa iteración.
fuente
gotosi esa es la mejor opción.goto: programadores malos y programadores pragmáticos. Los primeros se explican por sí mismos. Este último, en el que encajaría si elige usarlos bien, utiliza un concepto llamado "malvado" cuando es el menor de (dos) males. Lea esto para comprender mejor algunos conceptos de C ++ que puede necesitar usar de vez en cuando (macros, goto's, preprocesador, matrices): parashift.com/c++-faq-lite/big-picture.html#faq-6.15gotoraramente es la mejor opción. ¿Por qué no poner los bucles en su propia función (inlinesi te preocupa la velocidad) yreturnde esto?No, no lo estropees con un
break. Este es el último bastión restante para el uso degoto.fuente
Solo para agregar una respuesta explícita usando lambdas:
Por supuesto, este patrón tiene ciertas limitaciones y obviamente solo C ++ 11, pero creo que es bastante útil.
fuente
Otro enfoque para salir de un bucle anidado es factorizar ambos bucles en una función separada, y
returndesde esa función cuando desee salir.Por supuesto, esto trae a colación el otro argumento de si alguna vez debería explícitamente
returndesde una función en cualquier lugar que no sea al final.fuente
continue_processing) que controlaban la ejecución de bloques de código más abajo en la función.break saldrá solo del bucle más interno que lo contiene.
Puede usar goto para salir de cualquier número de bucles.
Por supuesto, ir a menudo se considera perjudicial .
Usar break y goto puede hacer que sea más difícil razonar sobre la corrección de un programa. Vea aquí para una discusión sobre esto: Dijkstra no estaba loco .
fuente
breakoreturn.breakyreturntiene la ventaja degotoque no necesita buscar una etiqueta para saber a dónde van. Sí, debajo hay algún tipo degoto, pero muy restringido. Son mucho más fáciles de descifrar por el cerebro de coincidencia de patrones de un programador que los no restringidosgoto. Por lo tanto, son preferibles.goto.Aunque esta respuesta ya se presentó, creo que un buen enfoque es hacer lo siguiente:
fuente
gotoMainLoopse verifica cada ciclogotohace que el núcleo sea más legible y tenga un mejor rendimiento.¿Qué tal esto?
fuente
Un ejemplo de código con
gotouna etiqueta para salir de un bucle anidado:fuente
Una buena manera de salir de varios bucles anidados es refactorizar su código en una función:
fuente
Goto puede ser muy útil para romper bucles anidados
fuente
de msdn .
fuente
Creo que un
gotoes válido en esta circunstancia:Para simular un
break/continue, querrías:Rotura
Seguir
fuente
i. Por lo tanto,i++antes del gotoOtros lenguajes, como PHP, aceptan un parámetro para la interrupción (es decir, la interrupción 2;) para especificar la cantidad de niveles de bucle anidados de los que desea salir, pero C ++ no lo hace. Tendrá que resolverlo usando un booleano que establezca en falso antes del ciclo, establezca en verdadero en el ciclo si desea romper, más un corte condicional después del ciclo anidado, verificando si el booleano se estableció en verdadero y romper si es así.
fuente
Sé que esta es una publicación antigua. Pero sugeriría una respuesta un poco lógica y más simple.
fuente
j = conditionjque no funcionará si tiene un predicado complejo en lugar dej < conditionj.Divida cualquier número de bucles por una sola
boolvariable, vea a continuación:En este código tenemos
break;todos los bucles.fuente
No estoy seguro de si vale la pena, pero puede emular los bucles con nombre de Java con algunas macros simples:
Ejemplo de uso:
Otro ejemplo:
fuente
fuente
Puedes usar try ... catch.
Si tiene que salir de varios bucles a la vez, a menudo es una excepción.
fuente
Romper un bucle for es un poco extraño para mí, ya que la semántica de un bucle for generalmente indica que se ejecutará un número específico de veces. Sin embargo, no es malo en todos los casos; si está buscando algo en una colección y quiere romperlo después de encontrarlo, es útil. Sin embargo, la ruptura de bucles anidados no es posible en C ++; es en otros idiomas mediante el uso de un descanso etiquetado. Puede usar una etiqueta y un goto, pero eso podría provocarle acidez estomacal por la noche ... Sin embargo, parece la mejor opción.
fuente