IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SL & STL C++ Discussion :

pb avec vectors de pointeurs


Sujet :

SL & STL C++

  1. #1
    Futur Membre du Club
    Inscrit en
    Juillet 2003
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 6
    Points : 6
    Points
    6
    Par défaut pb avec vectors de pointeurs
    Bonjour,

    j ai en ce moment un gros probleme que je n arrive pas a resoudre. Vu que le code est plutot long et complexe j ai preferé essayer de faire un croquis de ce qui m arrivait. J ai essayé beaucoup de choses mais j ai toujours le meme probleme et je voudrais savoir si qqn aurait une idee de ce qu il m arrive.



    Donc j ai 2 vecteur (std::vector), le vecteur B contient des objets et le vecteur A des pointeurs vers ces objects. Le dessin 1) represente mon etat initial.

    Je supprime alors le 2ieme element du vecteur B et j arrive dans la situation 2) au lieu de la 3) qui est ce que je recherche.

    En gros j ai l impression que mon vecteur A contient des pointeurs vers les "cases" de mon vecteur B au lieu d etre des pointeurs vers les objets contenus. Ce qui fait que lorsque je supprime un element, les pointeurs de mon vecteur A ne se "decalent" pas.

    Est ce que qqn aurait une idee de ce qui peut se passer?

  2. #2
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Quand on effece un élément d'un vecteur, on bouge réellement tous les éléments qui sont après (si tu préfères, on les recopie à une nouvelle adresse, puis on effece l'original). Ce comportement est donc normal. Si tu veux que tes éléments aient une adresse fixe, utilise un vecteur de pointeurs ou un autre conteneur, comme list, qui n'a pas ce comportement.

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2005
    Messages
    700
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2005
    Messages : 700
    Points : 488
    Points
    488
    Par défaut
    Je ne suis pas un pro, mais je pense qu'il sera difficile de te répondre si tu ne nous montre pas le bout de code qui fait cette suppression, quelle fonction utilise tu?

  4. #4
    Futur Membre du Club
    Inscrit en
    Juillet 2003
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 6
    Points : 6
    Points
    6
    Par défaut
    JolyLoic>
    on bouge réellement tous les éléments qui sont après
    je pense que le pb est effectivement la.. tu me parles d "un vecteur de pointeur".. cad? il faudrait que je fasse un vecteur contenant des pointeurs ou c est une autre classe?

    giova_fr>
    je supprime l element de mon vecteur B en utilisant un iterateur et la fonction erase. Ma fonction de suppression de l element num-ieme du vecteur B (geomObjects):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    	geomObjects[num].cleanUp();
     
    	std::vector<TSGeomObject>::iterator it;
    	it=geomObjects.begin()+num;
    	geomObjects.erase(it);

  5. #5
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Points : 2 757
    Points
    2 757
    Par défaut
    Citation Envoyé par e-teo
    JolyLoic>
    on bouge réellement tous les éléments qui sont après
    je pense que le pb est effectivement la.. tu me parles d "un vecteur de pointeur".. cad? il faudrait que je fasse un vecteur contenant des pointeurs ou c est une autre classe?
    Les objets MaClasse gardent la même adresse après la suppression de l'un d'entre eux. ce sont les adresses des (MaClasse*) qui changent.

  6. #6
    Futur Membre du Club
    Inscrit en
    Juillet 2003
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 6
    Points : 6
    Points
    6
    Par défaut
    effectivement le probleme devait venir de cette histoire de "recopiage" des elements suivants qd on supprime un element d un vecteur.
    j ai donc modifie mon code pour en tenir compte en utilisant pour le vecteur B aussi un vecteur de pointeurs.
    et maintenant ca marche !
    merci pour votre aide!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Pb avec Vector.h (introuvable)
    Par Axiome dans le forum MFC
    Réponses: 5
    Dernier message: 02/02/2006, 14h06
  2. Réponses: 13
    Dernier message: 03/10/2005, 18h06
  3. Réponses: 8
    Dernier message: 26/08/2004, 18h59
  4. probleme avec vector
    Par venomelektro dans le forum SL & STL
    Réponses: 16
    Dernier message: 16/08/2004, 23h39
  5. vector de pointeurs sur des objet
    Par jean-bobby dans le forum SL & STL
    Réponses: 26
    Dernier message: 06/08/2004, 14h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo