La instrucción continue en C++
Este artículo explicará cómo utilizar la instrucción continue
en C++.
Utilice la instrucción continue
para omitir la parte restante del cuerpo del bucle
La instrucción continue
se utiliza junto con las instrucciones de iteración para manipular la ejecución del bloque dependiente del bucle. Es decir, una vez que se alcanza la instrucción continue
en el bucle, se omiten las siguientes instrucciones y el control pasa al paso de evaluación de la condición. Si la condición es verdadera, el bucle comienza con un nuevo bucle de iteración como de costumbre.
Tenga en cuenta que continue
sólo se puede incluir en un bloque de código encerrado por al menos una de las declaraciones de bucle: for
, while
, do...while
o for
basado en rango. Supongamos que tenemos varios bucles anidados y la instrucción continue
está incluida en la interna. El comportamiento de salto afecta solo al bucle interno, mientras que el externo se comporta como de costumbre.
En el siguiente ejemplo, demostramos dos bucles for
, el interior de los cuales itera a través del vector
de cadenas. Observe que la instrucción continue
se especifica al principio del cuerpo del bucle, y esencialmente controla si se ejecuta la siguiente instrucción. Por lo tanto, los valores de cadena con rtop
y ntop
no se muestran en la salida y el bucle exterior ejecuta todos sus bucles.
#include <iomanip>
#include <iostream>
#include <vector>
using std::cout;
using std::endl;
using std::setw;
using std::string;
using std::vector;
int main() {
vector<string> vec = {"ntop", "mtop", "htop", "ktop",
"rtop", "ltop", "ftop", "atop"};
for (int i = 0; i < 3; i++) {
for (const auto &it : vec) {
if (it == "rtop" || it == "ntop") continue;
cout << it << ", ";
}
cout << endl;
}
return EXIT_SUCCESS;
}
Producción :
mtop, htop, ktop, ltop, ftop, atop,
mtop, htop, ktop, ltop, ftop, atop,
mtop, htop, ktop, ltop, ftop, atop,
Alternativamente, podemos implementar el mismo comportamiento del fragmento de código anterior usando la declaración goto
en lugar de continue
. Recuerde que goto
actúa como un salto incondicional a la línea dada en el programa, y no debe usarse para saltar sobre las sentencias de inicialización de variables. En este caso, la declaración vacía se puede marcar con la etiqueta END
para que goto
mueva la ejecución al punto dado.
#include <iomanip>
#include <iostream>
#include <vector>
using std::cout;
using std::endl;
using std::setw;
using std::string;
using std::vector;
int main() {
vector<string> vec = {"ntop", "mtop", "htop", "ktop",
"rtop", "ltop", "ftop", "atop"};
for (int i = 0; i < 3; i++) {
for (const auto &it : vec) {
if (it == "rtop" || it == "ntop") goto END;
cout << it << ", ";
END:;
}
cout << endl;
}
return EXIT_SUCCESS;
}
La declaración continue
puede considerarse una mala práctica según algunas pautas de codificación, lo que hace que el código sea un poco más difícil de leer. A menudo se da la misma recomendación al uso excesivo de declaraciones goto
. Aún así, se pueden utilizar estas construcciones cuando el problema dado puede internalizar el costo de legibilidad y ofrecer una implementación más fácil usando estas declaraciones. El siguiente ejemplo de código muestra el uso básico de la instrucción continue
en un bucle while
.
#include <iomanip>
#include <iostream>
#include <vector>
using std::cout;
using std::endl;
using std::setw;
using std::string;
using std::vector;
int main() {
vector<string> vec = {"ntop", "mtop", "htop", "ktop",
"rtop", "ltop", "ftop", "atop"};
while (!vec.empty()) {
if (vec.back() == "atop") {
vec.pop_back();
continue;
}
cout << vec.back() << ", ";
vec.pop_back();
}
cout << "\nsize = " << vec.size() << endl;
return EXIT_SUCCESS;
}
Producción :
ftop, ltop, rtop, ktop, htop, mtop, ntop,
size = 0
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook