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
Prochaine révision
Révision précédente
lang:cpp:boucles [2020/03/03 17:21] – [Boucle sur des données] : réécriture pour faciliter la lecture 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 202: Ligne 184:
  
 ====Ranges==== ====Ranges====
 +
 +Les ''ranges'' de la ''std'' n'implémentent que des algorithmes en $O(1)$. Il n'est donc pas possible de trier des vues.
  
   * Boucle   * Boucle
Ligne 221: Ligne 205:
  
 </code> </code>
- 
-<note important>Il n'est pas possible de trier des vues.</note> 
  
   * S'arrêter sous une certaine condition :   * S'arrêter sous une certaine condition :
Ligne 266: Ligne 248:
 </code> </code>
  
-<note important>Les vues sont en lecture seule.</note>+<WRAP center round important 60%> 
 +Les vues sont en lecture seule 
 +</WRAP>
  
 Le code  Le code 
Ligne 307: 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.1583252464.txt.gz · Dernière modification : 2020/03/03 17:21 de root