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
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