
Envoyé par
dourouc05
a- Voici le code que vous devez rédiger en C++ :
b- Qt apporte ici une grande nouveauté par rapport au C++ standard : la version utilisant les itérateurs n'est pas extrêmement lisible, en comparaison avec la version permise par Qt.
Ceci sera-t-il corrigé par la nouvelle version du C++ ? Je n'en ai personnellement jamais entendu parler. Les conteneurs seraient-ils les grands oubliés de ce nouveau standard ?
c- D'ailleurs, n'était-il pas plus logique de proposer cette construction avant ?
Ceci porte à réflexion.
Si les conteneurs ne bénéficient pas d'une manière standard d'une méthode extrêmement facile et très lisible, n'est-ce pas un signe de non-reconnaissance ? Les enfants mal-aimés du C++ ? Pourquoi en est-il ainsi ? Le concept est-il toujours utile, ou bien d'autres solutions sont-elles à préférer ? Est-il toujours adapté au contexte actuel (les dernières spécifications C++ ont à peu près 10 ans) ? Qu'y manque-t-il encore ?
d- En conséquence, Qt possède des versions réécrites des conteneurs de la STL. À l'époque, ils y étaient obligés : les STL fournies par les compilateurs ne supportaient pas forcément très bien les conteneurs standard. Ils en ont profité pour ajouter de nouvelles fonctionnalités, comme foreach. Ont-ils bien fait ? Ont-ils fait mieux que la spécification ? Qu'est-ce qui les distingue de cette spécification ? Leur performances ? Leur sûreté ? Leur efficacité ?
a- Non, on utilise:
v.erase(std::remove(v.begin(), v.end(), 5), v.end());
(Et si on avait des ranges, cela serait encore plus simple dans ce cas là)
b- Qt passe par un préprocesseur qui fait plus de choses que le préprocesseur hérité du C, ce code n'est plus du C++. Pour atteindre l'équivalent, le langage doit être amendé.
Ce qui tombe bien car cela sera le cas.
Non seulement il va y avoir un "for (Type e : conteneur)", mais aussi un std::foreach capable de prendre des lambdas functions.
c- J'ai tendance à considérer les itérateurs de la STL comme une petite révolution pas entièrement comprise.
Je t'invite à jeter un coup d'oeil au bouquin d'algorithmique de Stepanov (le code source est librement téléchargeable, même si ce n'est plus le cas du draft d'Element Of Programming), ou à cet article: http://www.developpez.net/forums/d78...o/#post4786766
d- le foreach ne vient pas des conteneurs de Qt, mais de son préprocesseur.
Après, avoir des containers COW avait certainement son intérêt en l'absence de sémantique de mouvement, avec l'arrivée du C++0x, je n'en suis plus aussi certain. Trop cher.
Quant aux itérateurs GoF ... ils ne m'ont jamais vraiment trop convaincu.
Partager