Outils pour utilisateurs

Outils du site


lang:cpp:boucles

Ceci est une ancienne révision du document !


Toutes les boucles

La boucle traditionnelle

  • Intervalle
for (int i = 0; i < 100; i++)
  std::cout << i << std::endl;

Chaque paramètre est optionnel :

int i = 0;
for (;;)
{
  if (i >= 100)
    break;
  std::cout << i << std::endl;
  i++;
}

Et sa version while :

int i = 0;
while (i < 100)
{
  std::cout << i << std::endl;
  i++;
}
  • Conteneur supportant les index :
std::array<int, 4> arr { 10, 20, 30, 40 };
for (size_t i = 0; i < arr.size(); i++)
  std::cout << arr[i] << std::endl;

Utiliser de préférence la version for each pour parcourir l'ensemble d'un conteneur.

  • Conteneur ne supportant pas les index :
std::set<int> set { 10, 20, 30, 40 };
std::set<int>::const_iterator it;
 
for (it = set.begin(); it != set.end(); it++)
  std::cout << *it << std::endl;

Utiliser de préférence la version for each pour parcourir l'ensemble d'un conteneur.

for each

  • Conteneur de type primitif :
std::array<int, 4> arr = { 10, 20, 30, 40 };
for (int i : arr)
  std::cout << i << std::endl;
  • Conteneur de type non primitif :
std::set<std::string> set { "10", "20", "30", "40" };
 
for (const std::string& val : set)
  std::cout << val << std::endl;
  • Conteneur multi-types (std::map, std::tuple, …) :
std::map<int, std::string> map { {10, "10"}, {20, "20"}, {30, "30"}, {40, "40"} };
 
// L'utilisation de auto est obligatoire.
for (const auto & [key, value] : map)
  std::cout << value << std::endl;
  • Sur une classe personnalisée :

Il faut définir l'itérateur et la classe à parcourir. C++11 range-based for loops Archive le 26/12/2019

L'exemple ci-dessous se passe de template.

Il faut commencer par déclarer l'itérateur.

 
lang/cpp/boucles.1577364989.txt.gz · Dernière modification : 2019/12/26 13:56 de root