
Envoyé par
JolyLoic
- On sait au premier coup d'oeil qu'on va itérer une fois et une seule sur les éléments du conteneur, sans devoir lire le contenu de la boucle, car la variable d'itération n'est pas exposée.
Ah oui mais non...
D'abord, on expose la variable d'itération (i ici)
Ensuite, on est dans un pur raccourci:
for(int i : v) === for(int i=0;i<v.size();i++)
(ou toute version équivalente utilisant std::distance())
Enfin, on part du principe que LA BONNE itération sur un conteneur, c'est l'itération sur TOUT le conteneur. C'est une très mauvaise idée, à mon avis. La plupart des "bons" algorithmes sur conteneur reposent justement sur l'idée qu'on peut itérer sur de petits morceaux de celui ci (c'est le principe du diviser pour régner).
Au final, c'est un raccourci et un pousse au crime. Je pense que ca part d'une de ces bonnes intentions dont l'enfer est pavé: ouvrir le C++ aux informaticiens fâchés avec l'algorithmique (ceux qu'on reconnait en entretien parce qu'ils expliquent qu'ils programment depuis l'âge de six ans...), mais ca n'en reste pas moins une mauvaise idée (ou, tout au plus, un raccourci d'écriture sans grande importance).
Pour un exemple de boucle sans variable d'itération, je te conseille de regarder des langage "orientés tableaux" comme l'APL, le K ou le J. Un petit exemple: en J, la moyenne s'écrit "+/ % #" (somme (+/) divisé par (%) nombre (#))
+/ 1 2 3 = 6
1 % 2 = 0.5
# 1 2 3 = 3
+/ % # 1 2 3 = 2
(un vieux fil sur le J, pour ceux que ca intéresse
http://www.developpez.net/forums/d86...s-pratiquants/
)
Francois
Partager