lang:cpp:boucles
Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
lang:cpp:boucles [2020/02/26 09:11] – Ajout d'un commentaire sur le tri des vues root | lang: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 |
- | ===Conteneur supportant les index=== | + | ====Conteneur supportant les index==== |
<code cpp> | <code cpp> | ||
Ligne 8: | Ligne 8: | ||
</ | </ | ||
- | ===Conteneur supportant les itérateurs=== | + | ====Conteneur supportant les itérateurs==== |
<code cpp> | <code cpp> | ||
std:: | std:: | ||
- | std:: | ||
- | std:: | ||
// Lecture / écriture | // Lecture / écriture | ||
- | for (itc = vector.begin(); | + | std:: |
- | (*itc)++; | + | for (it = vector.begin(); |
+ | (*it)++; | ||
// Lecture seule | // Lecture seule | ||
- | for (it = vector.cbegin(); | + | std:: |
- | std::cout << *it << std::endl; | + | for (itc = vector.cbegin(); |
+ | std::cout << *itc << std::endl; | ||
</ | </ | ||
+ | |||
+ | =====Programmation fonctionnelle===== | ||
====for each==== | ====for each==== | ||
Ligne 29: | Ligne 31: | ||
<code cpp> | <code cpp> | ||
std:: | std:: | ||
- | 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' | ||
+ | for (const int& i : arr) | ||
std::cout << i << std::endl; | std::cout << i << std::endl; | ||
</ | </ | ||
Ligne 42: | Ligne 46: | ||
</ | </ | ||
- | ===Conteneur multi-types ('' | + | ===Conteneur multi-types (map, tuple, ...)=== |
<code cpp> | <code cpp> | ||
Ligne 48: | Ligne 52: | ||
// L' | // L' | ||
+ | // const s' | ||
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: | ||
</ | </ | ||
- | ===Sur une classe personnalisée=== | + | ===Implémentation sur une classe personnalisée=== |
Il faut définir l' | Il faut définir l' | ||
- | L'exemple ci-dessous se passe de '' | + | Dans l'idéal, '' |
Il faut commencer par déclarer l' | Il faut commencer par déclarer l' | ||
Ligne 174: | Ligne 179: | ||
{ | { | ||
std::cout << i.getA() << std::endl; | std::cout << i.getA() << std::endl; | ||
- | } | ||
- | } | ||
- | </ | ||
- | |||
- | ===Via une coroutine=== | ||
- | |||
- | <code cpp> | ||
- | #include < | ||
- | #include < | ||
- | |||
- | std:: | ||
- | { | ||
- | 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 '' | ||
* Boucle | * Boucle | ||
Ligne 221: | Ligne 205: | ||
</ | </ | ||
- | |||
- | <note important> | ||
* S' | * S' | ||
Ligne 266: | Ligne 248: | ||
</ | </ | ||
- | <note important> | + | <WRAP center round important |
+ | Les vues sont en lecture seule | ||
+ | </WRAP> | ||
Le code | Le code | ||
Ligne 307: | Ligne 291: | ||
} | } | ||
</ | </ | ||
+ | |||
+ | =====Via une coroutine===== | ||
+ | |||
+ | <code cpp> | ||
+ | #include < | ||
+ | #include < | ||
+ | |||
+ | std:: | ||
+ | { | ||
+ | for (int i = 0; i < iterations; i++) | ||
+ | { | ||
+ | co_yield i; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | int main() | ||
+ | { | ||
+ | for (int i : loop(100)) | ||
+ | { | ||
+ | std::cout << i << std::endl; | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ |
lang/cpp/boucles.1582704719.txt.gz · Dernière modification : 2020/02/26 09:11 de root