Bonjour à vous tous.
Dans l'idée d'optimisation d'un programme, pensez vous que de créer notre propre foncteur et utilisé for_each peut accèlérer ce dit programme?
Ou vaut il mieux rester dans un "for" normal ?
Merci .
Bonjour à vous tous.
Dans l'idée d'optimisation d'un programme, pensez vous que de créer notre propre foncteur et utilisé for_each peut accèlérer ce dit programme?
Ou vaut il mieux rester dans un "for" normal ?
Merci .
Bonsoir,
Le for_each n'étant certainement rien de plus qu'un for camouflé, y passer aura pour conséquence au mieux de ne rien faire, au pire de perdre en perf avec l'indirection (et éventuels traitements) supplémentaires.
Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
Un peu de programmation réseau ?
Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.
Je me permettrai de faire la distinction entre le for_each et le for automatique de C++11 (for (auto e: liste))
Mes principes de bases du codeur qui veut pouvoir dormir:Pour faire des graphes, essayez yEd.
- Une variable de moins est une source d'erreur en moins.
- Un pointeur de moins est une montagne d'erreurs en moins.
- Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
- jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
- La plus sotte des questions est celle qu'on ne pose pas.
le ter nel est le titre porté par un de mes personnages de jeu de rôle
D'accord merci pour vos réponses ^^.
Je demandais ça car dans le livre de Bjarne, en conseil il est marquer d'utiliser un for_each plutôt qu'une boucle ^^.
Entre le for_each et le for :
- Le for_each explicite ce qu'on fait (on sait dès le début qu'on parcours tout le range, sans sauter le moindre élément, en allant jusqu'au bout, alors qu'un simple for, il faut lire le body pour voir ça)
- Le for_each camoufle l'usage des itérateurs
- Le for_each garanti que l'itérateur de fin ne sera calculé qu'une fois
- Si on n'a pas les lambdas, le for_each est totalement illisible
- Même avec les lambdas, il est moins lisible que certaines alternatives, ne serait-ce que parce que moins habituel
Avec un compilateur qui les gère, je conseillerais vivement d'utiliser des range based for loops plutôt que des for_each (ou même que des for classiques quand c'est adapté), car ils en ont les avantages sans les inconvénients.
Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.
Salut, merci de ta réponse.
Je n'ai pas compris en quoi avec le for il faut lire le body (c'est à dire le body d'ailleurs?).
Qu'est ce que sont les lambdas? (Les foncteurs / objet fonction? )
Qu'est ce qu'un range based for loop ?
Désolé, je suis un peu débutant en C++ ^^.
Merci
dans la dernière norme, C++11, une nouvelle syntaxe du for a été introduite: le range base for.
les lambdas peuvent être vu comme des "foncteurs locaux" la notation est un peu déroutante, que j'aurais du mal a expliquer.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 vector<int> v; // remplissage cout << "v contient"; for (int element : v) {cout << ' '<<v;} cout << endl;
Voici un exemple de syntaxe.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 int main() { vector<int> nums{3, 4, 2, 9, 15, 267}; for_each(nums.begin(), nums.end(), [](int &n){ n++; }); cout << "chaque nombre de n à bien été multiplié."<<endl; cout << "noms contient:"; for_each(nums.begin(), nums.end(), [](int &n){ cout << ' '<<n; }); cout <<endl; int somme = 0; for_each(nums.begin(), nums.end(), [somme&](int &n){ somme+=n; }); cout << "total: "<<somme<<endl; return 0; }
Mes principes de bases du codeur qui veut pouvoir dormir:Pour faire des graphes, essayez yEd.
- Une variable de moins est une source d'erreur en moins.
- Un pointeur de moins est une montagne d'erreurs en moins.
- Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
- jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
- La plus sotte des questions est celle qu'on ne pose pas.
le ter nel est le titre porté par un de mes personnages de jeu de rôle
Un jour, je passerais en C++11.
Mais pour le moment, je n'utilise que l'ancienne norme, donc bon... ^^.
Merci de tes explications ^^.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager