L'instruction continue en C++

Jinku Hu 12 octobre 2023
L'instruction continue en C++

Cet article explique comment utiliser l’instruction continue en C++.

Utilisez l’instruction continue pour ignorer la partie restante du corps de la boucle

L’instruction continue est utilisée en conjonction avec des instructions d’itération pour manipuler l’exécution du bloc dépendant de la boucle. À savoir, une fois que l’instruction continue est atteinte dans la boucle, les instructions suivantes sont ignorées et le contrôle passe à l’étape d’évaluation de la condition. Si la condition est vraie, la boucle démarre à partir d’un nouveau cycle d’itération comme d’habitude.

Notez que continue ne peut être inclus que dans un bloc de code entouré d’au moins une des instructions de boucle : for, while, do...while ou for basé sur une plage. Supposons que nous ayons plusieurs boucles imbriquées et que l’instruction continue soit incluse dans celle interne. Le comportement de saut n’affecte que la boucle interne tandis que la boucle externe se comporte comme d’habitude.

Dans l’exemple suivant, nous démontrons deux boucles for, dont l’intérieur itère à travers le vecteur de chaînes. Notez que l’instruction continue est spécifiée au début du corps de la boucle et qu’elle contrôle essentiellement si l’instruction suivante est exécutée. Ainsi, les valeurs de chaîne avec rtop et ntop ne sont pas affichées en sortie, et la boucle externe exécute tous ses cycles.

#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;
}

Production:

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

Alternativement, nous pouvons implémenter le même comportement que l’extrait de code précédent en utilisant l’instruction goto au lieu de continue. N’oubliez pas que goto agit comme un saut inconditionnel vers la ligne donnée dans le programme et qu’il ne doit pas être utilisé pour sauter par-dessus les instructions d’initialisation des variables. Dans ce cas, l’instruction vide peut être marquée avec le label END afin que goto déplace l’exécution au point donné.

#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;
}

L’instruction continue peut être considérée comme une mauvaise pratique par certaines directives de codage, ce qui rend le code un peu plus difficile à lire. La même recommandation est souvent donnée à l’usage excessif des instructions goto. Pourtant, on peut utiliser ces constructions lorsque le problème donné peut internaliser le coût de lisibilité et offrir une mise en œuvre plus facile à l’aide de ces instructions. L’exemple de code suivant montre l’utilisation de base de l’instruction continue dans une boucle 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;
}

Production:

ftop, ltop, rtop, ktop, htop, mtop, ntop,
size = 0
Auteur: 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

Article connexe - C++ Loop