OVH Cloud OVH Cloud

Iterateur ou indice

3 réponses
Avatar
rouillj6
Bonjour a tous,

j'aimerais savoir s'il y a une difference de vitesse entre le parcours
d'un vecteur avec un iterateur ou avec une simple boucle avec indice
entier.
Merci d'avance de vos reponses.

--
julien

3 réponses

Avatar
Arnaud Debaene
a écrit dans le message de news:

Bonjour a tous,

j'aimerais savoir s'il y a une difference de vitesse entre le parcours
d'un vecteur avec un iterateur ou avec une simple boucle avec indice
entier.
Merci d'avance de vos reponses.


C'est impossible à dire sans connaître ton compilateur, les options de
compilation utilisées, la STL utilisée et la machine cible (et c'est un
minimum!). En clair, la seule solution pour le savoir est de faire un
benchmark dans TON cas particulier. Ceci-dit, je m'attendrais à ce que dans
n'importe quelle implémentation sérieuse, les performances soient très
similaires.

Attention, ceci ne s'applique évidemment pas à une version debug de la STL
qui dispose d'un mécanisme d'"iterator debugging" visant à détecter les
mauvais usages des iterateurs : ces mécanismes sont très utiles quand ils
sont activés, mais ils sont bien sûr redibitoires pour les performances.

Arnaud

Avatar
Vincent Jacques
wrote:
j'aimerais savoir s'il y a une difference de vitesse entre le parcours
d'un vecteur avec un iterateur ou avec une simple boucle avec indice
entier.


RYO ! Toi ici !

Normalement, les STL sont /très/ bien programmées et optimisées, donc
parcourir avec un itérateur est au moins aussi bien qu'avec un indice entier.

En plus, ça apporte une couche d'abstraction, c'est pas plus mal :-)

Faut aussi se pencher vers les algorithmes standards qui permettent
d'éviter d'écrire une boucle explicite, et qui, une nouvelle fois, sont
tous écrits correctement, et donc tu évites des erreurs, ainsi que de
réinventer la roue dans certaines circonstances.

Ça se passe bien ton stage ? (on va continuer en privé, hein...)

--
Vincent Jacques

Avatar
kanze
Vincent Jacques wrote:
wrote:

j'aimerais savoir s'il y a une difference de vitesse entre
le parcours d'un vecteur avec un iterateur ou avec une
simple boucle avec indice entier.


Normalement, les STL sont /très/ bien programmées et
optimisées, donc parcourir avec un itérateur est au moins
aussi bien qu'avec un indice entier.


Ça n'a pas été mon expérience. La conception de la STL rend
parfois les performances plus difficiles. Autrefois,
évidemment, non. Tout dépend de la contexte. Et de
l'optimisateur du compilateur. Et de l'architecture du système.

En plus, ça apporte une couche d'abstraction, c'est pas plus
mal :-)


C'est toujours un plus, bien que dans le cas de la STL, la
couche est parfois trop mince.

Faut aussi se pencher vers les algorithmes standards qui
permettent d'éviter d'écrire une boucle explicite, et qui, une
nouvelle fois, sont tous écrits correctement, et donc tu
évites des erreurs, ainsi que de réinventer la roue dans
certaines circonstances.


Là aussi, quand le nom de l'algorithme est parlant, et que
l'algorithme fait exactement ce que tu veux, c'est une gagne
nette. (Sauf encore, en ce qui concerne les performances. Il
m'est arrivé de devoir renoncer à l'algorithme standard à cause
des performances.) Dès qu'on commence à devoir écrire des
classes spéciales, etc., il faut voir : Si on va pouvoir
réutiliser les classes, c'est bien. Si on peut donner un nom
signifiant à la classe, j'ai tendance à la faire aussi, mais les
avis sont partagés. Mais quand il faut sortir quelque chose qui
se trouve naturellement dans la boucle, on va rapidement vers
l'obfuscation.

--
James Kanze GABI Software
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34