Difference for_each et for
Fermé
yuri648
Messages postés
677
Date d'inscription
mardi 30 décembre 2008
Statut
Membre
Dernière intervention
20 mai 2015
-
10 janv. 2012 à 13:36
Emplet99 Messages postés 1 Date d'inscription jeudi 12 janvier 2012 Statut Membre Dernière intervention 12 janvier 2012 - 12 janv. 2012 à 16:44
Emplet99 Messages postés 1 Date d'inscription jeudi 12 janvier 2012 Statut Membre Dernière intervention 12 janvier 2012 - 12 janv. 2012 à 16:44
A voir également:
- Difference for_each et for
- Différence entre tcp et udp - Guide
- Downloader for pc - Télécharger - Téléchargement & Transfert
- Copytrans heic for windows - Télécharger - Visionnage & Diaporama
- Download instagram for pc - Télécharger - Divers Communication
- Saveaspdf.exe for office 2007 - Télécharger - Bureautique
5 réponses
KX
Messages postés
16752
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
31 août 2024
3 018
10 janv. 2012 à 13:53
10 janv. 2012 à 13:53
Déjà je conteste ton affirmation comme quoi la boucle for est plus rapide que la boucle for_each. C'est peut-être vrai dans certains contextes, mais dans d'autres c'est la boucle for_each qui est la plus rapide, cela dépend de l'implémentation qui est faite, du langage dans lequel tu codes, et de la manière dont tu te sers de ces boucles.
Contre-exemple en Java avec une liste chaînée :
Cette boucle for est de complexité quadratique car en utilisant une liste chaînée, les appels à get(i) sont de complexité linéaire .
La boucle foreach est ici de complexité linéaire car elle utilise les itérateurs de la liste et se promène sur les éléments les uns à la suite des autres.
Dans ce contexte, la boucle for each est plus rapide que la boucle for, alors t'expliquer pourquoi la boucle for est plus rapide que la boucle for_each n'aurait pas de sens.
Contre-exemple en Java avec une liste chaînée :
LinkedList<String> liste = new LinkedList<String> liste(); // ... for (int i=0; i<liste.size(); i++) System.out.println(liste.get(i));
Cette boucle for est de complexité quadratique car en utilisant une liste chaînée, les appels à get(i) sont de complexité linéaire .
LinkedList<String> liste = new LinkedList<String> liste(); // ... for (String s : liste) // for each en Java System.out.println(liste.get(i));
La boucle foreach est ici de complexité linéaire car elle utilise les itérateurs de la liste et se promène sur les éléments les uns à la suite des autres.
Dans ce contexte, la boucle for each est plus rapide que la boucle for, alors t'expliquer pourquoi la boucle for est plus rapide que la boucle for_each n'aurait pas de sens.
vordano
Messages postés
1682
Date d'inscription
mardi 12 juillet 2011
Statut
Membre
Dernière intervention
20 juillet 2012
316
10 janv. 2012 à 14:00
10 janv. 2012 à 14:00
chaque cas est unique, tu utilise ce que tu veux selon le cas
yuri648
Messages postés
677
Date d'inscription
mardi 30 décembre 2008
Statut
Membre
Dernière intervention
20 mai 2015
7
10 janv. 2012 à 14:02
10 janv. 2012 à 14:02
mais est ce que vous pouvez me donner une explication a mon cas
je veux dire le parcours des vecteurs est plus long avec la boucle for_each.?
je veux dire le parcours des vecteurs est plus long avec la boucle for_each.?
vordano
Messages postés
1682
Date d'inscription
mardi 12 juillet 2011
Statut
Membre
Dernière intervention
20 juillet 2012
316
10 janv. 2012 à 14:05
10 janv. 2012 à 14:05
un vecteur d'entier n'est pas un type compliqué, donc la méthode pour parcourir chaque élément est linéaire, ya juste besoin de compter de 0 à 10 et tu récupère d'autres entier.
essaye en créant une classe de personne et fait un vecteur de personne en ressortant le nom d'une personne, normalement ça devrais être plus rapide pour le for each
essaye en créant une classe de personne et fait un vecteur de personne en ressortant le nom d'une personne, normalement ça devrais être plus rapide pour le for each
KX
Messages postés
16752
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
31 août 2024
3 018
10 janv. 2012 à 14:50
10 janv. 2012 à 14:50
Je viens de faire des tests en C++ et je trouve comme en Java que la partie for_each qui utilise des itérateur est quasiment immédiate contrairement à for et for each :
for_each 0 for 1269 for each 6155
#include <iostream> #include <vector> #include <algorithm> #include <time.h> inline void todo(int i) { int j = i; } int main() { clock_t start,finish; int n = (int) 4.5e8; std::vector<int> v(n); start = clock(); for_each (v.begin(), v.end(), todo); finish = clock(); printf ("for_each\t%ld\n", finish-start); start = clock(); for (int i=0; i<n; i++) todo(v[i]); finish = clock(); printf ("for\t\t%ld\n", finish-start); start = clock(); for each (int i in v) todo(v[i]); finish = clock(); printf ("for each\t%ld\n", finish-start); system("pause"); return 0; }
matthoffman
Messages postés
405
Date d'inscription
lundi 24 mars 2008
Statut
Membre
Dernière intervention
22 janvier 2013
47
10 janv. 2012 à 15:10
10 janv. 2012 à 15:10
Comme on a pu te dire cela depends juste du type de donnees que tu manipules.
Dans un cas le for sera plus rapide dans l'autre cas ca sera le foreach.
Si l'un etait TOUJOURS plus rapide que l'autre alors "l'autre" serai deprecie donc plus utilise ;)
Dans un cas le for sera plus rapide dans l'autre cas ca sera le foreach.
Si l'un etait TOUJOURS plus rapide que l'autre alors "l'autre" serai deprecie donc plus utilise ;)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonjour,
forum.hardware.fr/hfr/.../PHP/foreach-php-sujet_45607_1.htmEn cache - Pages similaires
J'ai essayé ce lien:http://forum.hardware.fr/hfr/Programmation/PHP/foreach-php-sujet_45607_1.htm
C'est pas flagrant et ça dépend beaucoup de la manière dont il est écrit.
Pour te donner une idée, voilà les résultats d'un bench sur un tableau de 10000 éléments (oui, quand même )
*boucle For avec calcul de la taille hors de la boucle
Résultat : 20000 temps d'exécution : 0.017132
*boucle For avec calcul de la taille dans la boucle
Résultat : 20000 temps d'exécution : 0.022836
*boucle While avec instruction each
Résultat : 20000 temps d'exécution : 0.035938
*boucle Foreach
Résultat : 20000 temps d'exécution : 0.020736
*boucle While classique, calcul de la longueur hors boucle
Résultat : 20000 temps d'exécution : 0.016767
forum.hardware.fr/hfr/.../PHP/foreach-php-sujet_45607_1.htmEn cache - Pages similaires
J'ai essayé ce lien:http://forum.hardware.fr/hfr/Programmation/PHP/foreach-php-sujet_45607_1.htm
C'est pas flagrant et ça dépend beaucoup de la manière dont il est écrit.
Pour te donner une idée, voilà les résultats d'un bench sur un tableau de 10000 éléments (oui, quand même )
*boucle For avec calcul de la taille hors de la boucle
Résultat : 20000 temps d'exécution : 0.017132
*boucle For avec calcul de la taille dans la boucle
Résultat : 20000 temps d'exécution : 0.022836
*boucle While avec instruction each
Résultat : 20000 temps d'exécution : 0.035938
*boucle Foreach
Résultat : 20000 temps d'exécution : 0.020736
*boucle While classique, calcul de la longueur hors boucle
Résultat : 20000 temps d'exécution : 0.016767
yuri648
Messages postés
677
Date d'inscription
mardi 30 décembre 2008
Statut
Membre
Dernière intervention
20 mai 2015
7
10 janv. 2012 à 14:08
10 janv. 2012 à 14:08
le lien ne marche pas
10 janv. 2012 à 13:58
moi je l'ai testé dans les vecteurs
vector<int> myvector;
la boucle for etait plus rapide que la boucle for_each
10 janv. 2012 à 14:54
12 janv. 2012 à 16:44
Ca marche super bien :p ;D hin ? n'est-ce pas yuri :p