Difference for_each et for
yuri648
Messages postés
677
Date d'inscription
Statut
Membre
Dernière intervention
-
Emplet99 Messages postés 1 Date d'inscription Statut Membre Dernière intervention -
Emplet99 Messages postés 1 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
la boucle for est plus rapide que la boucle for_each est ce que vous pouvez m'expliquer pourquoi??
merci d'avance
la boucle for est plus rapide que la boucle for_each est ce que vous pouvez m'expliquer pourquoi??
merci d'avance
A voir également:
- Difference for_each et for
- Downloader for pc - Télécharger - Téléchargement & Transfert
- Différence entre tcp et udp - Guide
- Difference million milliard - Accueil - Technologies
- Difference entre mo et mb ✓ - Forum Matériel & Système
- Différence mb et mo ✓ - Forum Matériel & Système
5 réponses
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.
chaque cas est unique, tu utilise ce que tu veux selon le cas
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
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; }
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
moi je l'ai testé dans les vecteurs
vector<int> myvector;
la boucle for etait plus rapide que la boucle for_each
Ca marche super bien :p ;D hin ? n'est-ce pas yuri :p