Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3064 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  déclaration d'un vector de pointeur

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

déclaration d'un vector de pointeur

n°2183495
kochfet
Posté le 02-04-2013 à 00:22:47  profilanswer
 

Comment initialiser un vecteur de pointeurs dans un constructeur par défaut si on ne connait pas sa taille.
exemple : vector < C*> vec ou C est classe
 
j'essaye avec :
 
for (int i=0;i< ?????; i++)
vec[i]=new C();
 
 
mais je ne comprend pas par quelle valeur je dois remplacer ???? dans la boucle for (i<????)

mood
Publicité
Posté le 02-04-2013 à 00:22:47  profilanswer
 

n°2183500
Farian
Posté le 02-04-2013 à 01:07:24  profilanswer
 

Bonjour !
 
Par défaut, le vecteur est vide. Pour ajouter des éléments, la méthode la plus simple (et la plus rapide) est "push_back", qui ajoute un nouvel élément à la fin du tableau.
 
Plus de précisions et une liste exhaustive des méthodes ici : http://www.cplusplus.com/reference/vector/vector/
 
Bonne continuation !

n°2183506
kochfet
Posté le 02-04-2013 à 07:35:55  profilanswer
 

Merci Farian pour la réponse.
 
Et si on a vector< vector <C*>>?

n°2183507
Farian
Posté le 02-04-2013 à 07:42:47  profilanswer
 

C'est à peine plus compliqué, il faut d'abord, dans un premier temps, gérer la première dimension, ce qui peut donner un truc du genre à l'initialisation :  
 
vector <vector <C*> > monVecteur
 
monVecteur.resize(taille1);
for (...)
{
    monVecteur[i].push_back(new C(...));
}
 
Ensuite, le vecteur principal et ses sous-vecteurs peuvent être gérés dynamiquement selon votre besoin.
 
Bonne continuation !
 
Edit : Selon votre utilisation, ne pas oublier de détruire le pointeur que vous avez alloué, le vecteur ne gère pas son cycle de vie

Message cité 1 fois
Message édité par Farian le 02-04-2013 à 07:44:04
n°2183639
theshockwa​ve
I work at a firm named Koslow
Posté le 02-04-2013 à 16:32:35  profilanswer
 

Farian a écrit :

Edit : Selon votre utilisation, ne pas oublier de détruire le pointeur que vous avez alloué, le vecteur ne gère pas son cycle de vie


 
Ou mieux : au lieu d'utiliser un pointeur nu, utiliser un std::unique_ptr (ou std::shared_ptr, suivant les besoins)


---------------
last.fm
n°2183882
kochfet
Posté le 03-04-2013 à 19:16:38  profilanswer
 

Merci pour toutes les réponses.
 

Citation :

Selon votre utilisation, ne pas oublier de détruire le pointeur que vous avez alloué, le vecteur ne gère pas son cycle de vie


 
 
on fait :
monVector~vector();
 
 
 
 
 
 
 

n°2183975
theshockwa​ve
I work at a firm named Koslow
Posté le 04-04-2013 à 10:47:41  profilanswer
 

kochfet a écrit :

on fait :
monVector~vector();


 
Non. On fait une boucle pour itérer sur les pointeurs et détruire ce qu'ils pointent.


---------------
last.fm
n°2184019
kochfet
Posté le 04-04-2013 à 12:08:22  profilanswer
 

pourquoi non. normalement c le même résultat qu'on va obtenir. C'est le destructeur prédéfini du vecteur qui va détruire le contenu de ce vecteur.

n°2184025
theshockwa​ve
I work at a firm named Koslow
Posté le 04-04-2013 à 12:25:03  profilanswer
 

D'une part, tu vas avoir des surprises si tu commences à appeler manuellement des destructeurs dans ton code.
Ensuite, ton vecteur à sa destruction va effectivement appeler le desutrcteur de chacun des éléments qu'il stocke, mais C* est un type qui ne connait pas la durée de vie de la donnée qu'il pointe, donc par défaut, il va la laisser intacte. Dans ton cas, ca se traduit par une fuite mémoire. C'est pour ca que je te recommandais plus haut d'utiliser des types de pointeurs plus évolués (unique_ptr ou shared_ptr) parce qu'en les utilisant, tu rends explicite la durée de vie de ta donnée, et donc ton pointeur pourra détruire la donnée tout seul si c'est approprié quand ton vecteur est détruit.
Mais j'insiste : dans tous les cas, tu ne dois pas appeler le destructeur de ton vecteur à la main. C'est quelque chose qu'on fait dans des cas très précis (en général, quand on écrit des allocateurs)
 


---------------
last.fm
n°2184287
kochfet
Posté le 05-04-2013 à 11:38:43  profilanswer
 

Merci pour toutes ces informations et pour la rapidité des réponses.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  déclaration d'un vector de pointeur

 

Sujets relatifs
Différence entre pointeur de pointeur et vector de pointeurvecteur de vecteur ou pointeur de pointeur
Vector et ArrayListmap<string, vector<string>> find
Comment récupérer la forme du pointeur souris n'importe où sous windowdeclaration en F90 et "if statement"
Que signifie cette déclaration ?transformé une declaration autrement
pointeur de tableau 2D d'entiers... 
Plus de sujets relatifs à : déclaration d'un vector de pointeur


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR