[résolu] efficacité avec les containers STL

efficacité avec les containers STL [résolu] - C++ - Programmation

Marsh Posté le 18-01-2009 à 17:20:34    

Bonjour,
 
Un petit problème me turlupine :
 
Je fais une bibliothèque permettant de créer des programmes qui posent des problèmes de complexité (temps d'execution). Je dois déplacer en temps critique des objets d'un vecteur à l'autre.
 
Si j'ai bien compris, un conteneur STL tel que vector<MonObjet> crée une copie de l'objet quand on lui en ajoute un, et efface sa copie quand on le retire.
Dans mon cas, il est donc intéressant du point de vue temps d'execution, bien que plus lourd pour l'ecriture de code, d'utiliser vector<MonObjet*> à la place. Ainsi, mes opérations durerons le temps de la copie d'un pointeur au lieu de celui de la copie d'un objet.
 
Ais-je raison ?


Message édité par miq75 le 18-01-2009 à 18:18:21
Reply

Marsh Posté le 18-01-2009 à 17:20:34   

Reply

Marsh Posté le 18-01-2009 à 17:26:47    

Tu as raison de dire que ça prendra moins de temps.
 
Tu as tort quand tu confonds complexité et temps d'exécution, et le passage de MonObjet à MonObjet* ne changera pas la complexité (enfin, à moins que dans ton MonObjet l'opération de copie ne sont pas en O(1)).


---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
Reply

Marsh Posté le 18-01-2009 à 17:36:43    

compelxité != tems d'exécution.
Si tu veut des perf regarde du coté de boost::intrusive ou de boost::pointer_container

Reply

Marsh Posté le 18-01-2009 à 17:42:09    

Ok, merci pour la confirmation.
(Comme quoi la STL ne permet pas de se passer dans tous les cas des pointeurs. Dommage.)
 
Merci aussi pour la précision sur la complexité. En fait, je parlais de la complexité «en» temps d'execution pour la différencier de celle en volume de stoquage.  

Reply

Marsh Posté le 18-01-2009 à 17:51:43    

sauf que la complexité != temps d'exécution attention.

Reply

Marsh Posté le 18-01-2009 à 17:55:31    

miq75 a écrit :

Ok, merci pour la confirmation.
(Comme quoi la STL ne permet pas de se passer dans tous les cas des pointeurs. Dommage.)
 
Merci aussi pour la précision sur la complexité. En fait, je parlais de la complexité «en» temps d'execution pour la différencier de celle en volume de stoquage.  


La complexité au sens où JoelF l'entend


---------------
Töp of the plöp
Reply

Marsh Posté le 18-01-2009 à 18:05:24    

J'avais suivi. (C'est celle que j'appelle, moi, complexité EN temps d'execution, bien qu'elle n'en soit qu'un indice)
 
Merci pour vos réponses rapides.

Reply

Marsh Posté le 18-01-2009 à 18:38:32    

oui mais non mais c'est pas grave :o

Reply

Marsh Posté le 18-01-2009 à 20:44:20    

Joel F a écrit :

compelxité != tems d'exécution.
Si tu veut des perf regarde du coté de boost::intrusive ou de boost::pointer_container


 
Est ce qu'un std::container (e.g:std::vector) stockant des objets boost::scoped_ptr peut être équivalent à un boost::pointer_container en terme de perf ?
 
Aprés peut être qu'il existe des différences niveau exception-safe thread-safe, copyable ou non ou je sias pas quoi d'autre


Message édité par frenchtoucco le 18-01-2009 à 20:45:06

---------------
je connais tout, je ne sais rien, seule certitude, à vouloir trop on finit par tout perdre.
Reply

Marsh Posté le 18-01-2009 à 20:47:18    

et également comparé à un Boost.Intrusive  , toujours en terme de performance


---------------
je connais tout, je ne sais rien, seule certitude, à vouloir trop on finit par tout perdre.
Reply

Marsh Posté le 18-01-2009 à 20:47:18   

Reply

Marsh Posté le 18-01-2009 à 20:57:47    

aucune idée, lire la doc aidera je pense

Reply

Marsh Posté le 18-01-2009 à 22:49:40    

Joel F a écrit :

aucune idée, lire la doc aidera je pense


faut pas non plus enculer les mouches, si t'es sur du refcount, y a un moment tu peux pas descendre. les intrusives c'est pour les bousins qui ont déjà un compteur intégré.
pointer_container c'est du sucre.

 


Je m'étonne beaucoup de ce topic, tu dis que t'as un problème de perf alors que tu ne maitrises pas le structure de données de base de la STL. Si ça se trouve t'as pas le scientist de base qui code son algo N^3 en N^5 parce que t'as choisi les mauvaises structures données sans y réfléchir. Genre une vector au lieu d'une list, etc


Message édité par Taz le 18-01-2009 à 22:53:15
Reply

Marsh Posté le 18-01-2009 à 22:54:25    

miq75 a écrit :

(Comme quoi la STL ne permet pas de se passer dans tous les cas des pointeurs. Dommage.)

Bah si, un pointeur c'est un type comme un autre.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed