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 :

liste initialisation ?


Sujet :

C++

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Points : 877
    Points
    877
    Par défaut liste initialisation ?
    Bonjour tous,

    -> pourriez vous me dire comment on fait pour initialiser un vector dans le constructeur d'une classe ? (avec une liste de diffusion)

    en fait j'ai pas mal de warnings dans mon code car je n'ai pas mis dans la liste d'initialisation les vector (et vector de vector)

    -> par exemple si on veut initialiser des variables de type double on fait comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MyClass:MyClass : variable1(0),variable2(0) {}
    -> par contre pourriez vous me dire comment faire pour initialiser des vector de string ou des vector de vector de double ??

    je vous remercie d'avance

    EDIT :

    par exemple,si je fais ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MyClass:MyClass : vector(0),vectorVector(0) {}
    mon vector sera initialisé avec dans la première case un zero ? et mon vector de vector contiendra un seul zero ?

    => est il possible d'initialiser un vector sans mettre de valeurs dedans à l'initialisation ?
    => je vous demande ceci car si je fais un ".push_back()" j'aurais la première case de mon vector qui contiendra le 0 de l'initialisation alors que je ne le veux pas...

  2. #2
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    RTFM

    http://www.cplusplus.com/reference/stl/vector/vector/

    Sinon c'est MyClass::MyClass

  3. #3
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Salut,

    Si tu compiles en C++11 (la nouvelle norme), tu peux également utiliser std::initializer_list pour le constructeur de ta classe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    class MyClass
    {
        public:
            MyClass(std::initializer_list<double> l):tab(l){}
            /* ... */
    };
     
    int main()
    {
        MyClass({2.3, 3.141592, 15.56, 21.45});
        /* ...*/
    }
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Points : 877
    Points
    877
    Par défaut
    apparemment (pour une initialisation classique) il faudrait que je fasse ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    explicit vector ( const Allocator& = Allocator() );
    par contre je ne comprends pas trop comment traduire ceci pour mon code car je ne comprends pas trop ce que c'est qu'un allocator...

    ça à l'air de ressembler à ce que je fais non ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MyClass::MyClass MyVector(0) {}
    ici j'initialise bien un vecteur de taille 0 si j'ai bien compris la doc C++ ?

    et pour un vecteur de vecteur ça doit marcher aussi ?

  5. #5
    Membre éprouvé

    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 533
    Points : 1 086
    Points
    1 086
    Par défaut
    Le mieux est peut-être de stocker les valeurs par défaut dans un tableau static, pour les rendre plus facilement réutilisables :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    #include "Myclass.h"
     
    //---------
     
    static const double MyTab[] = {2.3, 3.141592, 15.56, 21.45};
     
    //---------
     
    MyClass::MyClass() : tab(MyTab, MyTab+4), attr1(0) {}
    MyClass::MyClass(int attr) : tab(MyTab, MyTab+4), attr1(attr) {}

  6. #6
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    EDIT : Désolé, j'ai mal compris le code.

    Le tableau de static est en effet une bonne idée.

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Points : 877
    Points
    877
    Par défaut
    je n'ai pas trop compris cette histoire de static...

    moi dans mon cas je ne connais pas à priori la taille de mon tableau du coup je ne peux pas mettre des valeurs par défaut


    mais ce n'est pas grave, mon soucis est réglé, merci

  8. #8
    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
    Citation Envoyé par 21did21 Voir le message
    -> pourriez vous me dire comment on fait pour initialiser un vector dans le constructeur d'une classe ?
    Ça dépend avec quelles valeurs tu veux l'initialiser. Si tu veux un vecteur vide (ce qui a l'air d'être ton cas), il suffit de ne rien faire, le constructeur par défaut de vector créant un vecteur vide.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Points : 877
    Points
    877
    Par défaut
    Citation Envoyé par JolyLoic Voir le message
    Ça dépend avec quelles valeurs tu veux l'initialiser. Si tu veux un vecteur vide (ce qui a l'air d'être ton cas), il suffit de ne rien faire, le constructeur par défaut de vector créant un vecteur vide.
    bin en fait ça me met un warning si je fais ceci...
    du coup j'ai gardé cette solution qui à l'air de bien marcher (mon code ne plante pas et je n'ai plus de warning) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    myClass:myClass : monVector(0),monVectorDeVector(0) {}
    voici mes attributs :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    private
    std::vector<double> monVector;
    std::vector<std::vector<double> > monVectorDeVector;

  10. #10
    Membre éprouvé

    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 533
    Points : 1 086
    Points
    1 086
    Par défaut
    Citation Envoyé par 21did21 Voir le message
    bin en fait ça me met un warning si je fais ceci...
    Pas normal, ça ...
    Tu as bien mis myClass::myClass() : monVector(),monVectorDeVector() {} ?

  11. #11
    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
    Citation Envoyé par 21did21 Voir le message
    bin en fait ça me met un warning si je fais ceci...
    Je suis curieux de savoir quel warning. Est-ce que ça cache autre chose ?
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  12. #12
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Points : 877
    Points
    877
    Par défaut
    Citation Envoyé par JolyLoic Voir le message
    Je suis curieux de savoir quel warning
    voici le type de warning que j'ai si je n'initialise pas mon vecteur "AAA" de la classe : "myClass" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    'myClass::AAA' should be initialized in the member initialization list

  13. #13
    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
    Ok, à ce que je vois, tu as configuré ta compilation pour avoir des warnings de style auxquels je n'adhère pas, et qui ne sont pas actifs par défaut...

    Pour plus d'infos, par exemple : http://gcc.gnu.org/ml/gcc-help/2007-11/msg00055.html
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  14. #14
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Ah, ben, si tu veux initialiser ton vector à un ensemble vide, il "suffit" d'appeler le constructeur par défaut:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MyClass::MyClass():tab(){}
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  15. #15
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Points : 877
    Points
    877
    Par défaut
    Citation Envoyé par koala01 Voir le message
    Ah, ben, si tu veux initialiser ton vector à un ensemble vide, il "suffit" d'appeler le constructeur par défaut:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MyClass::MyClass():tab(){}
    d'accord super ! merci

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

Discussions similaires

  1. deux classes et liste initialisation
    Par stracoma dans le forum C++
    Réponses: 8
    Dernier message: 11/04/2015, 22h25
  2. list et in initialisation
    Par kleenex dans le forum C++
    Réponses: 1
    Dernier message: 11/06/2006, 04h50
  3. Initialisation d'un arbre avec liste
    Par Naruto_kun dans le forum C
    Réponses: 15
    Dernier message: 02/01/2006, 22h43
  4. [C#] Initialisation liste déroulante (dropdownlist)
    Par Amerok dans le forum ASP.NET
    Réponses: 20
    Dernier message: 23/11/2005, 17h48
  5. Comment initialiser une liste de composants avec une boucle ?
    Par EricSid dans le forum Composants VCL
    Réponses: 5
    Dernier message: 06/04/2005, 18h46

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