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 :

copier un vector de string


Sujet :

C++

  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    521
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 521
    Points : 136
    Points
    136
    Par défaut copier un vector de string
    Bonjour.

    C'est un peu bateau, mais je ne parviens pas a copier un vector de string correctement :

    j'ai un objet qui est censé en renvoyer un :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    const std::vector < std::string >  Object::getVectorString()
    {
        return _vectorString ;
    }
    ou encore dans le constructeur de copie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    _vectorString = other._vectorString ;
    Mon code est-t-il mauvais ?

    Merci si vous pouvez m'aider .

  2. #2
    Membre expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2011
    Messages
    739
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

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

    Informations forums :
    Inscription : Juin 2011
    Messages : 739
    Points : 3 627
    Points
    3 627
    Par défaut
    Bonsoir,

    Je ne comprends pas la relation entre les 2 codes qui sont -hors contexte- bon. Quel est l'erreur ? Pourrais-tu fournir un exemple minimaliste ?

    Il y a cependant 3 choses qui me choque:
    - getVectorString() est visiblement un getter, il devrait être const.
    - const dans le retour est de trop ou il manque une référence.
    - x = y n'est pas un appel de constructeur mais une affectation. Le constructeur c'est x(y) dans la liste d'initialisation.

  3. #3
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    521
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 521
    Points : 136
    Points
    136
    Par défaut
    Merci pour ta réponse, jo.

    getVectorString() est visiblement un getter, il devrait être const.
    en effet.

    Le constructeur c'est x(y) dans la liste d'initialisation.
    ah ?
    En fait c'est dans mon constructeur de copie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
    OBJECT::OBJECT ( OBJECT const& other )
    {
        _name = other._name ;
        _type = other._type ;
     
        _variable = other._variable ;
     
        _MONVECTOR = other._MONVECTOR ; // c'est ici que ca a pas l'aire de marcher correctement
     
    }
    Le but étant simplement de copier l'objet en construisant un nouveau

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    OBJECT nouvelObject ( monObjectQuiSertDeModel ) ;
    OBJECT *nouvelObjectPTR ( new OBJECT ( monObjectQuiSertDeModel ) ) ;
     
    etc...
    En tout cas, jusque là, tout fonctionne. Simplement, quand je tente de copier ( surement bêtement ) un std::vector, il n'a l'air d'en copier que le début ( sauf erreur )

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Citation Envoyé par jo_link_noir Voir le message
    Le constructeur c'est x(y) dans la liste d'initialisation.
    Mes constructeurs doivent-ils utiliser les listes d'initialisation ou l'affectation ?
    Mais même comme fait actuellement, ton std::vector devrait être parfaitement copié. Tu dois avoir un autre soucis quelque part, et un ECM aiderait bien.

  5. #5
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    521
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 521
    Points : 136
    Points
    136
    Par défaut
    ton std::vector devrait être parfaitement copié
    Autant pour moi, en effet. Cela fonctionne.

    C'est bon pour le constructeur de copie. Maintenant j'aimerais pouvoir utiliser le vector contenue dans un class, depuis une autre class.
    Je dois mal m'y prendre...je suppose que le mieux est la référence, mais comment faire avec un vector ?

    car j'essaye ceci sans résultat : (objet qui envoi le vector )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    std::vector < Object >& ObjetQuiEnvoiLaReferenceDuVectorPourLeFaireUtiliserParUnAutreObjet::renvoiLeVector ()
    {
        return _vector_Object;
    }

  6. #6
    Membre expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Points : 3 156
    Points
    3 156
    Par défaut
    Il va falloir relire tes cours Simplement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    std::vector < Object >& ObjetQuiEnvoiLaReferenceDuVectorPourLeFaireUtiliserParUnAutreObjet::renvoiLeVector () {
        return _vector_Object;
    }
    Find me on github

  7. #7
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    521
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 521
    Points : 136
    Points
    136
    Par défaut
    est-ce la longueur de mon impressionnant nom d'objet qui vous fait sourir
    ou pas..?

    ah oui je vois...dsl, j'ai mis un "&" en return par mégarde ( et amateurisme je l'avoue )

    En fait il compile, d'ailleurs, mais dès que le vector en vient à être updaté, il plante. ( le debugger confirme que c'est bien a l'utilisation du vector )..

    Votre réponse peut elle me laisser penser que c'est censé marcher ?

  8. #8
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    521
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 521
    Points : 136
    Points
    136
    Par défaut
    ok...desolé, je suis vraiment a côté de la plaque parfois...Faut que je see ++...Merci en tout cas pour votre réponse. Le bug vient d'autrepart.

    Toujours à propose de std::vector :

    Je suis bien souvent agacé avec les vectors, lors de la suppression d'elements :
    lorsque je supprime des éléments au fur et a mesure, lorsqu’il arrive au dernier, il plante.

    Ma technique, (pour l'instant ) , est sans doute branquignole, mais fonctionne...Elle consiste a rajouter un élément en begin du vector a la construction/initialisation de l'objet.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
        Objet modelBidon ;
        modelBidon.setPosition ( -10000, -10000 ) ; //là je suis sur qu'il ne sera pas génant, par ex
        modelBidon.setLife ( "invulnerable" ) ; // ou mieux, je le rend carrément indestructible...au moins je suis tranquille.
     
        _monVector.push_back( modelBidon ) ;
    et je détruits les objets ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
         for ( vector < Objet > ::iterator  it = _monVector.being() ; it != _monVector.end()  ; it ++ ) //il me semble qu'auto ne marche pas dans ce cas.
        {
                 if ( it -> conditionX() )
                 {
                            _monVector.erase( it ) ;
                            it = monVector.begin() ;
                 }
        }
    Ca marche, donc...mais c'est pénible, inutile, et prend un peu de ressources pour rien...Surtout que ça rajoute parfois des complications dans le code...

    Mon problème vous paraît-il normal ?
    Connaissez-vous un methode pour y remédier, à tout hasard ?

    Merci si vous pouvez m'aider

  9. #9
    Membre expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2011
    Messages
    739
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

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

    Informations forums :
    Inscription : Juin 2011
    Messages : 739
    Points : 3 627
    Points
    3 627

  10. #10
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    521
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 521
    Points : 136
    Points
    136
    Par défaut
    Merci !!

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

Discussions similaires

  1. vector<map<string, string> >::iterator ?
    Par scheme dans le forum C++
    Réponses: 11
    Dernier message: 10/12/2010, 09h32
  2. Réponses: 2
    Dernier message: 18/09/2010, 22h33
  3. Problème std::vector <std::string >
    Par TNT89 dans le forum SL & STL
    Réponses: 9
    Dernier message: 31/05/2008, 17h51
  4. conversion vector to string
    Par identifiant_bidon dans le forum C++
    Réponses: 18
    Dernier message: 15/11/2007, 10h40
  5. [jsp] Comment faire un cast de Vector to String?
    Par adil_vpb dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 05/03/2007, 11h29

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