C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Quand utiliser la STL plutot qu'un tableau ?
Goto page 1, 2  Next
 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French)
View previous topic :: View next topic  
Author Message
meow
Guest





PostPosted: Mon Aug 08, 2005 1:21 pm    Post subject: Quand utiliser la STL plutot qu'un tableau ? Reply with quote



Je suis en train d'implémenter des carreaux de Bezier : à peu de
chose près, un entier n (le degré) et un tableau de (n+1)*(n+2)/2
entrées où stocker les "points de controle".
Bref, je me demandais s'il était préférable d'utiliser un type
vector ou un pointeur pour stocker mes points de controle... J'imagine
qu'il y a du plus comme du moins pour les deux solutions mais j'ai un
peu de mal à évaluer tout ça. Pourrez vous m'aider ?

--Ben

Back to top
Fabien LE LEZ
Guest





PostPosted: Mon Aug 08, 2005 1:30 pm    Post subject: Re: Quand utiliser la STL plutot qu'un tableau ? Reply with quote



On 8 Aug 2005 06:21:25 -0700, "meow" <ben (AT) agat (DOT) net>:

Quote:
Quand utiliser la STL plutot qu'un tableau ?

Ta question me paraît mal formulée. Le type "tableau" par défaut, en
C++, est std::vector<>.

En d'autres termes, utilise std::vector<> sauf si tu as une bonne
raison d'utiliser autre chose.

Même quand je dois implémenter un type particulier de tableau (par
exemple, un mélange de vector<> et de map<>), la plupart du temps, en
interne, c'est un vector<> qui s'occupe de contenir les données.



Back to top
meow
Guest





PostPosted: Mon Aug 08, 2005 2:09 pm    Post subject: Re: Quand utiliser la STL plutot qu'un tableau ? Reply with quote



Ce que je voulais dire c'est :
est-ce qu'en stockant mes points de controle dans un *Point plutot que
dans un std::vector<Point> je gagne quelque chose ? En terme de
rapidité d'execution ou de mémoire ?

Back to top
meow
Guest





PostPosted: Mon Aug 08, 2005 2:09 pm    Post subject: Re: Quand utiliser la STL plutot qu'un tableau ? Reply with quote

Ce que je voulais dire c'est :
est-ce qu'en stockant mes points de controle dans un Point* plutot que
dans un std::vector<Point> je gagne quelque chose ? En terme de
rapidité d'execution ou de mémoire ?

Back to top
adebaene@club-internet.fr
Guest





PostPosted: Mon Aug 08, 2005 2:58 pm    Post subject: Re: Quand utiliser la STL plutot qu'un tableau ? Reply with quote


meow a écrit :

Quote:
Ce que je voulais dire c'est :
est-ce qu'en stockant mes points de controle dans un Point* plutot que
dans un std::vector<Point> je gagne quelque chose ? En terme de
rapidité d'execution ou de mémoire ?

Le gain serait négligeable 99% du temps.

Comme toujours dans ces cas là, commences par faire un programme
simple et correct, et *uniquement* s'il s'avère à l'usage qu'il y a
un problème de performances, préoccupes-toi de :
1) Utiliser un profiler pour mesurer et identifier les portions de code
qui posent un problème.
2) Micro-optimiser ses portions de code.

Les seules optimisations dont il faut se soucier en amont du codage, ce
sont les optimisations d'algorithme (qui de toute façon ont
généralement bien plus d'impact que les choix du type "vector VS
tableau-à-la-C"

Arnaud


Back to top
Bruno CAUSSE
Guest





PostPosted: Mon Aug 08, 2005 3:11 pm    Post subject: Re : Quand utiliser la STL plutot qu'un tableau ? Reply with quote

dans l'article [email]1123513098.237043.296170 (AT) g44g2000cwa (DOT) googlegroups.com[/email],
[email]adebaene (AT) club-internet (DOT) fr[/email] à [email]adebaene (AT) club-internet (DOT) fr[/email] a écrit le 8/08/05
16:58 :

Quote:
Les seules optimisations dont il faut se soucier en amont du codage, ce
sont les optimisations d'algorithme (qui de toute façon ont
généralement bien plus d'impact que les choix du type "vector VS
tableau-à-la-C"

Hum...

Je suis debutant, alors je vais surement dire une conerie, mais les données
d'un conteneur list vector.... sont stockés dans le tas (avec des new et
delete transparents pour l'utilisateur). Donc si tu crée bcq d'objet
"automatiques" contenant des conteneurs les perfs sont beaucoup moins
bonnes.


Back to top
JBB
Guest





PostPosted: Mon Aug 08, 2005 3:16 pm    Post subject: Re: Quand utiliser la STL plutot qu'un tableau ? Reply with quote

meow a écrit :
Quote:
Ce que je voulais dire c'est :
est-ce qu'en stockant mes points de controle dans un Point* plutot que
dans un std::vector<Point> je gagne quelque chose ? En terme de
rapidité d'execution ou de mémoire ?

Tu peux aussi coder en assembleur pour gagner un peu de temps

d'execution et de mémoire.
Mais le temps que tu vas passer en plus à coder et à debugger ton
programme pour gagner 10 malheureux petits % en performances, et bien
pendant ce temps là le PC moyen aura gagné en moyenne bien plus que ça.

Donc sauf si ton programme est destiné à être déployé sur des millions
d'équipements sur lesquels augmenter la RAM revient du coup tres cher,
ce ne sera pas rentable.

A l'heure actuelle 512 Mo de RAM coutent 50€uros soit grosso-modo une
heure-homme d'un ingénieur de SSI.

Apprends plutôt la STL ça te sera bien plus bénéfique.

Le seul intêret de faire autrement est à des fin pédagogique afin de
comprendre le fonctionnement interne de la mémoire et se rendre compte
par soi même tous les problemes que cela génère.

Back to top
JBB
Guest





PostPosted: Mon Aug 08, 2005 3:16 pm    Post subject: Re: Quand utiliser la STL plutot qu'un tableau ? Reply with quote

La réponse est donc : tout le temps.
Back to top
Fabien LE LEZ
Guest





PostPosted: Mon Aug 08, 2005 3:30 pm    Post subject: Re: Quand utiliser la STL plutot qu'un tableau ? Reply with quote

On Mon, 08 Aug 2005 17:16:50 +0200, JBB <merci (AT) pasdespam (DOT) fr>:

Quote:
La réponse est donc : tout le temps.

Sauf bien sûr quand il vaut mieux faire autrement :-)

Si la taille du tableau est constante et connue à la compilation, un
tableau à la C est aussi bien que vector<>. En pratique, on utilise
vector<> quand même, car ça facilite l'évolution du code.

Il existe quand même un cas où le tableau à la C est utile (je crois
que c'est le seul cas, mais je peux me tromper) : l'initialisation
statique.
static int const machin[]= { 13, 26, 99 };


Back to top
nico
Guest





PostPosted: Mon Aug 08, 2005 4:04 pm    Post subject: Re: Quand utiliser la STL plutot qu'un tableau ? Reply with quote

Salut,

Quote:
Quand utiliser la STL plutot qu'un tableau ?
Réponse simple : tout le temps.


--
nico

Back to top
Arnaud Debaene
Guest





PostPosted: Mon Aug 08, 2005 5:34 pm    Post subject: Re: Quand utiliser la STL plutot qu'un tableau ? Reply with quote

Bruno CAUSSE wrote:
Quote:
dans l'article [email]1123513098.237043.296170 (AT) g44g2000cwa (DOT) googlegroups.com[/email],
[email]adebaene (AT) club-internet (DOT) fr[/email] à [email]adebaene (AT) club-internet (DOT) fr[/email] a écrit le
8/08/05 16:58 :

Les seules optimisations dont il faut se soucier en amont du codage,
ce sont les optimisations d'algorithme (qui de toute façon ont
généralement bien plus d'impact que les choix du type "vector VS
tableau-à-la-C"

Hum...

Je suis debutant, alors je vais surement dire une conerie, mais les
données d'un conteneur list vector.... sont stockés dans le tas (avec
des new et delete transparents pour l'utilisateur). Donc si tu crée
bcq d'objet "automatiques" contenant des conteneurs les perfs sont
beaucoup moins bonnes.

Peut-être, et *si il s'avère que c'est un problème*, on en tiendra compte...

Si la taille du tableau est connue à la compilation (c'est rare, mais çà
arrive), j'ai tendance à utiliser boost::array : je trouve que ca rend le
code plus lisible, et çà a un surcout pour ainsi dire nul.

Anaud



Back to top
stephane_www
Guest





PostPosted: Tue Aug 09, 2005 8:39 am    Post subject: Re: Quand utiliser la STL plutot qu'un tableau ? Reply with quote

Arnaud Debaene wrote:
[...]
Quote:

Peut-être, et *si il s'avère que c'est un problème*, on en tiendra compte...

Si la taille du tableau est connue à la compilation (c'est rare, mais çà
arrive), j'ai tendance à utiliser boost::array : je trouve que ca rend le
code plus lisible, et çà a un surcout pour ainsi dire nul.

Donc std::vector a un surcout non nul Wink


Back to top
meow
Guest





PostPosted: Tue Aug 09, 2005 8:40 am    Post subject: Re: Quand utiliser la STL plutot qu'un tableau ? Reply with quote

Quote:
Tu peux aussi coder en assembleur pour gagner un peu de temps
d'execution et de mémoire.
Pas la peine d'etre méprisant, il y a un gap entre l'utilisation des

pointeurs et le passage à l'assembleur.

Quote:
Mais le temps que tu vas passer en plus à coder et à debugger ton
programme pour gagner 10 malheureux petits % en performances, et bien
pendant ce temps là le PC moyen aura gagné en moyenne bien plus que ça.
C'est là le noeud de ma question : il y a donc un gain linéaire de

l'ordre de 10% au prix de la gestion de la mémoire... Ok, merci.

Quote:
A l'heure actuelle 512 Mo de RAM coutent 50€uros soit grosso-modo une
heure-homme d'un ingénieur de SSI.
Cela n'a rien à voir avec le thread, mais pour info, le passage de

512Mo à 1Go sur ma machine (un portable SONY VAIO... Quelle idée !?
Plus jamais ça...) me coutera pas moins de 450€

J'en retiens donc que le gain en temps et en place, s'il existe, est
vraiment minime. Et qu'il vaut donc mieux utiliser la STL. Merci à
tous pour vos réponses.


Back to top
adebaene@club-internet.fr
Guest





PostPosted: Tue Aug 09, 2005 9:07 am    Post subject: Re: Quand utiliser la STL plutot qu'un tableau ? Reply with quote


stephane_www a écrit :

Quote:
Arnaud Debaene wrote:
[...]

Peut-être, et *si il s'avère que c'est un problème*, on en tiendra compte...

Si la taille du tableau est connue à la compilation (c'est rare, maisçà
arrive), j'ai tendance à utiliser boost::array : je trouve que ca rend le
code plus lisible, et çà a un surcout pour ainsi dire nul.

Donc std::vector a un surcout non nul Wink

Je n'ai pas dit qu'il était nul, j'ai dit qu'il était négligeable,
et encore je me suis mal exprimé. Il faudrait plutôt dire "99% du
temps le surcôut engendré par l'utilisation de std::vector n'a pas
d'impact sensible sur les performances du logiciel".

Si j'utilises parfois boost::array, c'est d'ailleurs plus pour
clarifier la sémantique (j'indique clairement que c'est un tableau de
taille fixe et connue) que pour des raisons de performances.

Arnaud


Back to top
Matthieu Moy
Guest





PostPosted: Tue Aug 09, 2005 9:10 am    Post subject: Re: Quand utiliser la STL plutot qu'un tableau ? Reply with quote

[email]adebaene (AT) club-internet (DOT) fr[/email] writes:

Quote:
Si j'utilises parfois boost::array, c'est d'ailleurs plus pour
clarifier la sémantique (j'indique clairement que c'est un tableau de
taille fixe et connue) que pour des raisons de performances.

Je connais pas boost::array, mais il y a un truc chiant avec
std::vector, c'est que tu as besoin d'un constructeur de recopie, et
donc, on ne peut pas mettre des objets dont ce constructeur a été
désactivé (ou alors, on rajoute une couche de pointeurs, mais on
obtient un truc plutôt pire qu'un tableau "C").

--
Matthieu

Back to top
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French) All times are GMT
Goto page 1, 2  Next
Page 1 of 2

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.