A instrução continue em C++

Jinku Hu 12 outubro 2023
A instrução continue em C++

Este artigo explicará como utilizar a instrução continue em C++.

Use a declaração continue para ignorar a parte restante do corpo do loop

A instrução continue é utilizada em conjunto com as instruções de iteração para manipular a execução do bloco dependente do loop. Ou seja, uma vez que a instrução continue é alcançada no loop, as instruções a seguir são puladas e o controle passa para a etapa de avaliação da condição. Se a condição for verdadeira, o loop começa a partir de um novo bucle de iteração, como de costume.

Observe que continue só pode ser incluído em um bloco de código delimitado por pelo menos uma das instruções de loop: for, while, do...while ou for baseado em intervalo. Suponha que temos vários loops aninhados e a instrução continue está incluída no interno. O comportamento de salto afeta apenas o loop interno, enquanto o externo se comporta normalmente.

No exemplo a seguir, demonstramos dois loops for, cujo interior itera por meio do vector de strings. Observe que a instrução continue é especificada no início do corpo do loop e, essencialmente, controla se a instrução a seguir é executada. Assim, os valores da string com rtop e ntop não são exibidos na saída e o loop externo executa todos os seus 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;
}

Produção:

mtop, htop, ktop, ltop, ftop, atop,
mtop, htop, ktop, ltop, ftop, atop,
mtop, htop, ktop, ltop, ftop, atop,

Alternativamente, podemos implementar o mesmo comportamento do fragmento de código anterior usando a instrução goto em vez de continue. Lembre-se de que goto atua como um salto incondicional para a linha fornecida no programa e não deve ser usado para saltar instruções de inicialização de variáveis. Neste caso, a instrução vazia pode ser marcada com o rótulo END para que goto mova a execução para o ponto 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;
}

A instrução continue pode ser considerada uma prática ruim por algumas diretrizes de codificação, tornando o código um pouco mais difícil de ler. A mesma recomendação é freqüentemente dada ao uso excessivo de instruções goto. Ainda assim, pode-se utilizar essas construções quando o problema fornecido puder internalizar o custo da legibilidade e oferecer implementação mais fácil usando essas instruções. O próximo exemplo de código mostra o uso básico da instrução continue em um loop 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;
}

Produção:

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

Artigo relacionado - C++ Loop