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   -
Bonjour,

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:

5 réponses

KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
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 :

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.
1
yuri648 Messages postés 677 Date d'inscription   Statut Membre Dernière intervention   7
 
merci de m'avoir répondu

moi je l'ai testé dans les vecteurs
vector<int> myvector;

la boucle for etait plus rapide que la boucle for_each
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Montre nous ton code pour qu'on te dise pourquoi tu obtiens ce résultat !
0
Emplet99 Messages postés 1 Date d'inscription   Statut Membre Dernière intervention  
 
ou bien alors ce que tu peux faire c'est d'aller directement sur le site de la prof ou bien lui envoyer un mail ...
Ca marche super bien :p ;D hin ? n'est-ce pas yuri :p
0
vordano Messages postés 1685 Date d'inscription   Statut Membre Dernière intervention   316
 
chaque cas est unique, tu utilise ce que tu veux selon le cas
1
yuri648 Messages postés 677 Date d'inscription   Statut Membre Dernière intervention   7
 
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.?
0
vordano Messages postés 1685 Date d'inscription   Statut Membre Dernière intervention   316
 
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
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
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;
}
1
matthoffman Messages postés 405 Date d'inscription   Statut Membre Dernière intervention   47
 
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 ;)
1

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
geegee
 
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
0
yuri648 Messages postés 677 Date d'inscription   Statut Membre Dernière intervention   7
 
le lien ne marche pas
0