OVH Cloud OVH Cloud

STL : vecteur de listes et listes de listes

14 réponses
Avatar
meow
Bonjour,

Juste une demande de confirmation :
- Apr=E8s essai, il semblerait que vector< list<bidule> > m'envoie
rapidement dans les choux. Aussi me demandes-je si les vecteurs peuvent
etre "param=E9t=E9s" avec des types de taille variable ?!
- qu'en est- il de list< list<bidule> > ?

10 réponses

1 2
Avatar
Matthieu Moy
"meow" writes:

Bonjour,

Juste une demande de confirmation :
- Après essai, il semblerait que vector< list<bidule> > m'envoie
rapidement dans les choux.


C'est à dire ?

Aussi me demandes-je si les vecteurs peuvent etre "paramétés" avec
des types de taille variable ?!


Attention, std::list<type> n'est pas vraiment "de taille variable" (si
on prend comme définition de taille "sizeof(type)"). C'est la quantité
de données que l'on peut mettre dedans qui peut être variable (mais
les données sont a priori au bout d'un pointeur).

--
Matthieu

Avatar
meow
Attention, std::list<type> n'est pas vraiment "de taille variable"
Certes... ça tient pas la route... J'ai donc du glisser une banane

ailleurs.
N'empeche ? Dans l'absolu, est-ce qu'on peut stocker des objets de
taille variable dans un vector ? dans un list ?

Avatar
Marc Boyer
Le 25-11-2005, meow a écrit :
Attention, std::list<type> n'est pas vraiment "de taille variable"
Certes... ça tient pas la route... J'ai donc du glisser une banane

ailleurs.
N'empeche ? Dans l'absolu, est-ce qu'on peut stocker des objets de
taille variable dans un vector ? dans un list ?


C'est quoi un object de taille variable ? Comment fais-tu cela,
et comment manipules-tu cela ?

Marc Boyer
--
Dans "Les misérables", Victor Hugo opposait émeute et insurrection.
L'émeute est le moment chaotique de destruction. L'insurrection,
au contraire, est le moment qui projette politiquement dans l'avenir
un groupe qui a conscience de lui-même et qui veut construire
quelque chose. (Pierre Rosanvallon, Libération 21/11/05)


Avatar
Stan
"Marc Boyer" a écrit dans le message
de news:
Attention, std::list<type> n'est pas vraiment "de taille variable"
Certes... ça tient pas la route... J'ai donc du glisser une banane

ailleurs.
N'empeche ? Dans l'absolu, est-ce qu'on peut stocker des objets de
taille variable dans un vector ? dans un list ?


C'est quoi un object de taille variable ? Comment fais-tu cela,
et comment manipules-tu cela ?



Ex :
class Elastique {/* */ };
Elastique x; // objet de taille variable

A manipuler avec précaution, risque de rupture ;-)

--
-Stan



Avatar
Arnaud Debaene
meow wrote:
Attention, std::list<type> n'est pas vraiment "de taille variable"
Certes... ça tient pas la route... J'ai donc du glisser une banane

ailleurs.
N'empeche ? Dans l'absolu, est-ce qu'on peut stocker des objets de
taille variable dans un vector ? dans un list ?


On, peut stocker aussi bien dans un vector que dans une list un nombre
variable d'éléments, si c'est là ta question. Encore faut-il manipuler
correctement ces containers. La manière généralement recommandée pour
ajouter des éléments à ces containers est par la méthode push_back.

Arnaud


Avatar
Matthieu Moy
"Arnaud Debaene" writes:

On, peut stocker aussi bien dans un vector que dans une list un nombre
variable d'éléments, si c'est là ta question. Encore faut-il manipuler
correctement ces containers. La manière généralement recommandée pour
ajouter des éléments à ces containers est par la méthode push_back.


Par contre, attention, un push_back invalide les iterateurs sur le
conteneur en général (pour le vecteur, si il n'y a pas la place de
mettre l'élément là ou il est, il faut recopier le tableau ailleurs).

--
Matthieu

Avatar
Cyrille
"Arnaud Debaene" writes:


On, peut stocker aussi bien dans un vector que dans une list un nombre
variable d'éléments, si c'est là ta question. Encore faut-il manipuler
correctement ces containers. La manière généralement recommandée pour
ajouter des éléments à ces containers est par la méthode push_back.



Par contre, attention, un push_back invalide les iterateurs sur le
conteneur en général (pour le vecteur, si il n'y a pas la place de
mettre l'élément là ou il est, il faut recopier le tableau ailleurs).


Un push_back invalide aussi les itérateurs d'une list? Je croyais que
seuls les opérations erase/remove/remove_if/clear pouvaient rendre
invalides des itérateurs de list, en l'occurence ceux qui pointent vers
les portions effacées.
(j'ai peut-être mal compris ce que tu dis)


Avatar
Jean-Marc Bourguet
Cyrille writes:

Un push_back invalide aussi les itérateurs d'une list?


Non.

A+

--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org

Avatar
meow
Oui, tiens, c'est vrai, c'est quoi ça un objet de taille variable ?
Je supposes que j'ai encore un peu de mal avec certaines notions de
base... Tant mieux, il y a des gens ici pour me sortir de l'ornière.

Qu'en est t'il d'un objet de type std::vector< int > ?
Un petit exemple jouet m'indique que sur mon systeme, quel que soit le
.reserve() que je fais dessus, la taille de mon tableau reste 12...

Oui, en fait, à bien y réfléchir, en fait je ne vois vraiment pas
comment on pourrait gérer des objets de taille variable !? Pourtant
j'ai pas fumé, je le jure !
Avatar
Fabien LE LEZ
On 28 Nov 2005 06:56:15 -0800, "meow" :

Oui, tiens, c'est vrai, c'est quoi ça un objet de taille variable ?


Ça n'existe pas.

Qu'en est t'il d'un objet de type std::vector< int > ?


En gros, l'objet vector<int> contient un pointeur vers une zone de
données. On peut changer de zone (pour en prendre une plus grande) au
fur et à mesure des besoins.
Un sizeof() ne donne que la taille du pointeur et des quelques petits
trucs qui vont avec, soit 12 sur ton système. Si la zone pointée est
différente, la valeur du pointeur varie, mais la taille du pointeur
reste égale à sizeof(void*).

Oui, en fait, à bien y réfléchir, en fait je ne vois vraiment pas
comment on pourrait gérer des objets de taille variable !?


Moi non plus.

1 2