OVH Cloud OVH Cloud

conteneurs de la STL

5 réponses
Avatar
Marc O.
Bonjour à tous,

Je débute avec la STL et je me demande si les implémentations des conteneurs
de celle-ci auraient pu offrir des spécialisations des fonctions lorsque les
conteneurs manipulent des pointeurs comme objets "contenus".
Y a-t-il des justifications techniques qui fait que cela n'a pas été retenu
et si non, quelles sont les raisons qui ont amené le comité à ne pas retenir
ce choix ?

Merci pour vos réponses.

5 réponses

Avatar
Guillaume Gourdin
Je débute avec la STL et je me demande si les implémentations des
conteneurs

de celle-ci auraient pu offrir des spécialisations des fonctions lorsque
les

conteneurs manipulent des pointeurs comme objets "contenus".
Y a-t-il des justifications techniques qui fait que cela n'a pas été
retenu

et si non, quelles sont les raisons qui ont amené le comité à ne pas
retenir

ce choix ?


Rien ne t'interdit de créer un std::vector<int *>...

Avatar
Marc O.
"Guillaume Gourdin" a écrit dans le message de
news:bttvqi$f39$
Je débute avec la STL et je me demande si les implémentations des
conteneurs

de celle-ci auraient pu offrir des spécialisations des fonctions lorsque
les

conteneurs manipulent des pointeurs comme objets "contenus".
Y a-t-il des justifications techniques qui fait que cela n'a pas été
retenu

et si non, quelles sont les raisons qui ont amené le comité à ne pas
retenir

ce choix ?


Rien ne t'interdit de créer un std::vector<int *>...


Ce n'est pas le sens de ma question... Ce que je veux dire c'est pourquoi
faut-il un vector<auto_ptr<int*> > pour avoir un comportement satisfaisant
au lieu de faire vector<int*>


Avatar
Fabien LE LEZ
On Mon, 12 Jan 2004 12:33:06 +0100, "Marc O."
wrote:

Ce n'est pas le sens de ma question... Ce que je veux dire c'est pourquoi
faut-il un vector<auto_ptr<int*> >


Ça ne marchera pas.

pour avoir un comportement satisfaisant
au lieu de faire vector<int*>


Tu veux dire que le destructeur de vector<int*> (et pop_back, erase,
etc.) devrait appeler delete sur les pointeurs contenus ? Concept
intéressant (et il n'est pas bien difficile de faire ton propre
conteneur avec ces spécifications), mais inutilisable dans le cas
général : comment savoir d'où viennent les pointeurs, et si oui ou non
il faut appeler delete ?

int n1 (12);
int n2 (314);

std::vector<int*> v;
v.push_back (&n1);
v.push_back (&n2);


--
;-)

http://www.gotw.ca/gotw/063.htm
http://www.gotw.ca/gotw/067.htm#2

Avatar
Fabien LE LEZ
On Mon, 12 Jan 2004 08:43:23 +0100, "Marc O."
wrote:

Je débute avec la STL et je me demande si les implémentations des conteneurs
de celle-ci auraient pu offrir des spécialisations des fonctions lorsque les
conteneurs manipulent des pointeurs comme objets "contenus".


A priori, un pointeur est un objet comme un autre.
La seule spécialisation que je connaisse, c'est vector<bool>,
justifiée par le fait qu'un bool prend moins de 8 bits. Et cette
spécialisation n'est pas forcément une bonne idée.

--
;-)

http://www.gotw.ca/gotw/063.htm
http://www.gotw.ca/gotw/067.htm#2

Avatar
kanze
"Marc O." wrote in message
news:<btu0ln$ar9$...
"Guillaume Gourdin" a écrit dans le message de
news:bttvqi$f39$
Je débute avec la STL et je me demande si les implémentations des
conteneurs de celle-ci auraient pu offrir des spécialisations des
fonctions lorsque les conteneurs manipulent des pointeurs comme
objets "contenus". Y a-t-il des justifications techniques qui fait
que cela n'a pas été retenu et si non, quelles sont les raisons
qui ont amené le comité à ne pas retenir ce choix ?


Rien ne t'interdit de créer un std::vector<int *>...


Ce n'est pas le sens de ma question... Ce que je veux dire c'est
pourquoi faut-il un vector<auto_ptr<int*> > pour avoir un comportement
satisfaisant au lieu de faire vector<int*>


Tu as une drôle de définition de « satisfaisant » : une erreur de
compilation avec une bibliothèque à jour, et un comportement indéfini si
jamais ça passe la comple.

--
James Kanze GABI Software mailto:
Conseils en informatique orientée objet/ http://www.gabi-soft.fr
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16