Outils pour utilisateurs

Outils du site


lang:cpp:boucles

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
lang:cpp:boucles [2020/04/27 08:45] – Conversion de <note> vers <WRAP> rootlang:cpp:boucles [2020/06/16 15:00] (Version actuelle) – Précision sur le style fonctionnel root
Ligne 1: Ligne 1:
-====Boucle sur des données==== +=====Boucle sur des données (old style)===== 
-===Conteneur supportant les index===+====Conteneur supportant les index====
  
 <code cpp> <code cpp>
Ligne 8: Ligne 8:
 </code> </code>
  
-===Conteneur supportant les itérateurs===+====Conteneur supportant les itérateurs====
 <code cpp> <code cpp>
 std::vector<int> vector{ 10, 20, 30, 40 }; std::vector<int> vector{ 10, 20, 30, 40 };
Ligne 22: Ligne 22:
   std::cout << *itc << std::endl;   std::cout << *itc << std::endl;
 </code> </code>
 +
 +=====Programmation fonctionnelle=====
  
 ====for each==== ====for each====
Ligne 29: Ligne 31:
 <code cpp> <code cpp>
 std::array<int, 4> arr = { 10, 20, 30, 40 }; std::array<int, 4> arr = { 10, 20, 30, 40 };
-for (int i : arr)+// Ici, on utilise const & pour conserver le style fonctionnel. 
 +// Mais passer en copie un type primitif n'est pas plus penalisant que d'utiliser une référence. 
 +for (const inti : arr)
   std::cout << i << std::endl;   std::cout << i << std::endl;
 </code> </code>
Ligne 42: Ligne 46:
 </code> </code>
  
-===Conteneur multi-types (''std::map''''std::tuple'', ...)===+===Conteneur multi-types (map, tuple, ...)===
  
 <code cpp> <code cpp>
Ligne 48: Ligne 52:
  
 // L'utilisation de auto est obligatoire. // L'utilisation de auto est obligatoire.
 +// const s'applique sur toutes les variables.
 for (const auto & [key, value] : map) for (const auto & [key, value] : map)
   std::cout << value << std::endl;   std::cout << value << std::endl;
Ligne 70: Ligne 75:
 </code> </code>
  
-===Sur une classe personnalisée===+===Implémentation sur une classe personnalisée===
  
 Il faut définir l'itérateur et la classe à parcourir. [[https://www.cprogramming.com/c++11/c++11-ranged-for-loop.html|C++11 range-based for loops]] {{ :lang:cpp:boucles:range-based_for_loops_in_c_11_-_cprogramming.com_2019-12-26_12_35_03_.html |Archive le 26/12/2019}} Il faut définir l'itérateur et la classe à parcourir. [[https://www.cprogramming.com/c++11/c++11-ranged-for-loop.html|C++11 range-based for loops]] {{ :lang:cpp:boucles:range-based_for_loops_in_c_11_-_cprogramming.com_2019-12-26_12_35_03_.html |Archive le 26/12/2019}}
  
-L'exemple ci-dessous se passe de ''template''.+Dans l'idéal, ''DataSample'' devrait prendre une classe en ''template'' plutôt que la classe ''Data'' en dur.
  
 Il faut commencer par déclarer l'itérateur. Il faut commencer par déclarer l'itérateur.
Ligne 174: Ligne 179:
   {   {
     std::cout << i.getA() << std::endl;     std::cout << i.getA() << std::endl;
-  } 
-} 
-</code> 
- 
-===Via une coroutine=== 
- 
-<code cpp> 
-#include <experimental/generator> 
-#include <iostream> 
-  
-std::experimental::generator<int> loop(int iterations) 
-{ 
-  for (int i = 0; i < iterations; i++) 
-  { 
-    co_yield i; 
-  } 
-} 
-  
-int main() 
-{ 
-  for (int i : loop(100)) 
-  { 
-    std::cout << i << std::endl; 
   }   }
 } }
Ligne 309: Ligne 291:
 } }
 </code> </code>
 +
 +=====Via une coroutine=====
 +
 +<code cpp>
 +#include <experimental/generator>
 +#include <iostream>
 + 
 +std::experimental::generator<int> loop(int iterations)
 +{
 +  for (int i = 0; i < iterations; i++)
 +  {
 +    co_yield i;
 +  }
 +}
 + 
 +int main()
 +{
 +  for (int i : loop(100))
 +  {
 +    std::cout << i << std::endl;
 +  }
 +}
 +</code>
 +
lang/cpp/boucles.1587969945.txt.gz · Dernière modification : 2020/04/27 08:45 de root