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

 C++ Discussion :

Copie de vecteurs de pointeurs


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 31
    Par défaut Copie de vecteurs de pointeurs
    Bonjour,

    Je suis confronté à un problème apparemmment commun en C++, à savoir j'ai "mal" copié un vecteur et je ne sais pas comment rectifier le tir.
    Je m'explique :

    Je dispose d'un object A de type vector<Objet*>. Dans une fonction je suis ammené à travailler cet objet A et à le transformer, MAIS, je tiens à conserver la version originale, c'est pourquoi je créé un objet B de type vector<Objet*>.
    J'instancie B (initialement identique à A) via :
    vector<Objet*> B = A;

    Par la suite je suis ammené à écrire quelque chose de la forme "A ---> B", et c'est là que je constate que j'ai copié les pointeurs vers les objets du vecteur A et non pas leur contenu et que par conséquent une modification de l'un modifie également l'autre.

    Ce que je voulais était obtenir un autre vecteur contenant des pointeurs vers une série d'objets DISTINCTS de ceux de A (même si identiques au début). J'ai mis un certain temps à déduire que les erreurs que j'obtenais vennaient de ma copie incorrecte.

    J'ai l'obligation de manipuler des pointeurs vers les objets (ceux-ci était bien trop gros pour être copiés), aussi quelle serait la bonne méthode pour procéder ?

    Je recours une fois de plus à votre aide, merci d'avance !

  2. #2
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Qui doivent être distincts? les objets pointés, ou les listes de pointeurs?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 31
    Par défaut
    J'aimerai obtenir 2 vector<Objet*> distincts, avec chacun une série de pointeurs pointant sur des Objets distincts, de sorte que je puisse manipuler l'un sans impacter l'autre.

    Cependant j'ai besoin initialement que les objets sur lequels ils pointent soient initalement identiques.

    Par exemple j'ai :
    vector<int*> A une liste de pointeurs vers des entiers (1, 2, 3, 4, 5).
    Je veux créer un vector<int*> B qui pointe lui aussi vers des entiers qui s'avèrent aussi valoir (1, 2, 3, 4, 5).
    Par la suite je modifie B pour que le vecteurs contienne des pointeurs vers quelque chose comme (1, 2, 3)... mais que A n'ait pas changé et pointe toujours vers (1, 2, 3, 4, 5).

    Initialement ils doivent être identiques, mais je veux pouvoir les manipuler séparément

    J'ai essayé une autre méthode :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    vector<Objet*> B;
    for(unsigned int i = 0; i < A.size(); i++){
    	B.push_back(A[i]);
    }
    Mais cela revient strictement au même...

    EDIT : Je pensais avoir découvers la solution avec la fonction vector::assign, mais je ne sais pas si c'est du a une mauvaise utilisation de ma part, mais cela ne modifie en rien mon erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    vector<Objet*> B;
    B.assign(A.begin(), A.end());

  4. #4
    Membre Expert Avatar de Astraya
    Homme Profil pro
    Consommateur de café
    Inscrit en
    Mai 2007
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Consommateur de café
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 048
    Par défaut
    Tu ne copie rien a part les pointeurs. Si tu veux faire ce que tu veux faire (lao tseu ) tu DOIS réallouer tout les éléments contenu dans ton vecteur A dans ton vecteur B avec un new et le constructeur par copie des Objets.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    vector<Objet*> B;
    for(unsigned int i = 0; i < A.size(); i++){
    	B.push_back(new Objet(A[i]));
    }
    EDIT: Et n'oublies pas de delete chaque élément des 2 vecteurs

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 31
    Par défaut
    EDIT : Merci, j'ai réussi a bidouiller un constructeur de copie pour mon objet, ça marche !

    Les pointeurs c'est de moins en moins mon truc, surtout depuis que je manipule réellement des objets

  6. #6
    Membre Expert Avatar de Astraya
    Homme Profil pro
    Consommateur de café
    Inscrit en
    Mai 2007
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Consommateur de café
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 048
    Par défaut
    http://cpp.developpez.com/faq/cpp/?p...tructeur_copie
    Tu devrais réviser les bases...
    dereference ton A[i]

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

Discussions similaires

  1. Arbre N-aire avec des vecteurs de pointeurs
    Par valderama dans le forum Débuter
    Réponses: 3
    Dernier message: 15/01/2009, 16h42
  2. Prob : Suppresion instance d'un vecteur de pointeurs
    Par Julien_C++ dans le forum C++
    Réponses: 5
    Dernier message: 01/04/2007, 20h50
  3. Copie de structure par pointeur - Problème LSB MSB
    Par the_ionic dans le forum Réseau
    Réponses: 4
    Dernier message: 17/07/2006, 15h08
  4. [Débutant]Vecteur de pointeurs
    Par @r$£~%[ dans le forum C++
    Réponses: 18
    Dernier message: 09/08/2005, 16h19
  5. Réponses: 3
    Dernier message: 24/04/2005, 14h19

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