La instrucción continue en C++

Jinku Hu 12 octubre 2023
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
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

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

Artículo relacionado - C++ Loop