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 :).
Version imprimable
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.
Je me permettrai de faire la distinction entre le for_each et le for automatique de C++11 (for (auto e: liste))
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.
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:
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:
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; }
Un jour, je passerais en C++11.
Mais pour le moment, je n'utilise que l'ancienne norme, donc bon... ^^.
Merci de tes explications ^^.