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 :

Ajout d'un élément à un vector


Sujet :

SL & STL C++

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2005
    Messages : 168
    Par défaut Ajout d'un élément à un vector
    Bonjour à tous,

    j'aurais une petite question : comment faire pour ajouter un élément à un vector contenant une structure qui elle même contient une structure ? J'ai essayé :

    vector.push_back()

    et d'initialiser les valeurs par la suite mais le compilo veut des arguments pour push_back et c'est là que je bloque. J'ai essayé de mettre entre accolade du genre :

    vector.push_back({"une string", 0, "une seconde string" , 1})

    mais il n'accepte pas également et surtout comment faire lorsque la structure contient elle même une structure ? Est-ce que quelqu'un pourrait me compléter l'exemple ci-dessous ? :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    ...
     
    struct sous_stru
    {
       string sous_sting ;
       int sous_int ;
    };
     
    struct stru
    {
       string string ;
       int int ;
       sous_stru sous_stru ;
    };
     
    vector<stru> vec ;
     
    vec.push_back(???); // endroit à compléter
     
    ...
    Merci d'avance.

  2. #2
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    L'initialisation avec {} ne marche qu'avec les PODs.
    string n'est pas un POD donc déjà n'y pense même plus.

    Ensuite tu peux pas donner un type comme nom de variable.

    Pour revenir à ton problème, tu peux soit créer un objet et assigner à chaque membre la valeur que tu veux, soit utiliser les constructeurs.

  3. #3
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 393
    Par défaut
    string n'est pas POD, mais possède un constructeur, et stru et sous_stru sont des POD.

    Je propose de tester en deux étapes:
    1. La structure doit être initialisée correctement (notamment, une sous-structure est supposée avoir ses propres accolades).
      Essaie ceci:
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      stru uneStru = {"une string", 0, {"une seconde string" , 1}};
      vec.push_back(uneStru);
      (note: tu devrais aussi pouvoir déclarer uneStru en const en plus).
    2. Si le premier code compile, c'est déjà pas mal.
      Tu peux à présent essayer en rassemblant le tout en une ligne :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      vec.push_back({"une string", 0, {"une seconde string" , 1}});
      Avec un peu de chance, ça marchera, sinon tu devras te contenter de la première solution...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  4. #4
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    2/ ne marchera pas, et pour 1/ il vaut quand même mieux utiliser un constructeur, c'est plus propre et ça évitera les mauvaises surprises si jamais la représentation interne de la structure change (par exemple).

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

Discussions similaires

  1. Ajouter des éléments dans Vector à 2D
    Par mimish dans le forum C++
    Réponses: 0
    Dernier message: 15/03/2011, 17h42
  2. Ajout champs multi-éléments
    Par Terminator dans le forum Access
    Réponses: 4
    Dernier message: 08/02/2007, 19h30
  3. Réponses: 26
    Dernier message: 20/06/2006, 14h56
  4. Réponses: 4
    Dernier message: 14/06/2006, 17h22
  5. [DHTML] Ajouts dynamque d'élément
    Par metalpetsFR dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 13/04/2006, 17h43

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