
Envoyé par
koala01
Bien avant d'avoir un code rapide, la priorité est au fait d'avoir un code qui fonctionne.
Tous les algorithmes cités plus haut fonctionnent. La différence ne porte que sur leur efficacité. C'est d'ailleurs le contexte de la remarque du GotW
[Guideline] Reuse standard library algorithms instead of handcrafting your own. It's faster, easier, AND safer!

Envoyé par
koala01
si, par la suite, il s'avère que, pour une raison ou une autre, nous obtenons de mauvais temps d'exécution, il sera beaucoup plus facile de changer de conteneur (et de fonction de recherche) si on doit rechercher "find(tab.begin(),tab.end() " que si on doit rechercher toutes les boucles que l'on a pu créer dans l'ensemble des fonctions qui seront impactées par le changement de conteneur
J'en doute.
D'abord, il ne s'agit pas d'un "si", mais d'un "quand". Les recherches sont très courantes en programmation et dès qu'un conteneur est un peu gros, l'impact en terme de vitesse est énorme (un facteur 50 à 100 pour 1000 éléments, un facteur 25 000 à 50 000 pour un million). Le problème est tellement courant que la STL fournit tous ces algorithmes. Retarder leur utilisationme semble un peu gratuit.
Par ailleurs, la refactorisation ne se limitera pas à changer un algo ou un conteneur. Dans le cas de vecteur triés, on introduit un "contrat" supplémentaire : la préservation de l'ordre. Si l'on travaille sur des structures lourdes, on va remplacer le tri par une indexation. En terme de report, c'est assez lourd, et ça risque d'introduire toutes sortes de risques d'erreurs.
Enfin, dans le cadre d'un projet réel, j'observe que les mauvais choix initiaux ont une fâcheuse tendance à perdurer. Parce que les délais sont trop courts, parce qu'il faut boucler, parce qu'il y a une nouvelle fonctionnalité qu'on considère urgente, parce qu'on ne peut risquer d'introduire une régression à ce stade, les "optimisations" dont tu parles sont souvent reportées, et on finit par livrer quelque chose d'inutilisable.
Francois
Partager