2010-03-15 6 views
1

Je développe une simulation basée sur OpenGL en C++. J'optimise mon code maintenant et je vois dans tout le code l'utilisation fréquente de std: list et std: vector. Quoi de plus performant: continuer à utiliser des structures de données stl C++ ou une liste chaînée avec pointeur? L'opération principale qui implique std :: list et std :: vector ouvre un itérateur et parcourt tous les éléments des structures de données et applique un traitementCollections stl C++ ou listes chaînées

+3

Si vous n'avez pas encore défini votre code, vous posez la question prématurément. Vous devriez savoir avant d'arriver ici si std :: list ou std :: vector prennent un temps disproportionné. –

+2

Je suppose que si vous profilez votre code, vous verrez que votre utilisation de STL n'est pas la chose la plus lente. Ne vous embêtez pas à poser cette question jusqu'à ce que ce soit la chose la plus lente ... en mode de libération entièrement optimisé. –

+0

Juste pour info, "performant" est le mot que j'entends le plus souvent pour ce que vous appelez "performatic". – sblom

Répondre

5

Que diriez-vous des conteneurs stl de pointeurs?

Il est hautement improbable que vous soyez en mesure de développer des structures plus performantes que le modèle intégré. Le seul point négatif est que les conteneurs contiennent effectivement des copies d'objets stockés dans ces conteneurs. Si vous vous inquiétez de cette surcharge de mémoire (plusieurs structures hébergeant plusieurs copies des mêmes objets, rompant la cohérence à travers la table), vous devriez penser à utiliser les structures stl de pointeurs pour ce dont vous avez besoin. Algorithmiquement, la structure dont vous avez besoin est implémentée dans le fichier stl, vous devez donc l'utiliser. Il n'est pas nécessaire de réimplémenter la même structure.

4

Utilisez les structures de données STL C++, mais utilisez-les efficacement. Si vous utilisez std :: liste et std :: vector, regardez des fonctions telles que trouver, for_each, accumuler, etc. Voici une bonne lecture: http://www.cplusplus.com/reference/

Lisez les sections sur l'algorithme, numérique et fonctionnelle . En outre, je recommande fortement STL de Scott Meyers.

Questions connexes