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 :

declaration dynamique de variable


Sujet :

C++

  1. #1
    Membre éclairé Avatar de LesLemmings
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    302
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 302
    Par défaut declaration dynamique de variable
    bonjour,
    dans mon prog je voudrais créer n variable !
    n peut varier en fonction de situation.

    je voulais savoir comment créer mes variable
    (elle aurons comme nom variable1, variable2 ... et sont du type CAcquisition* mais bon cela n'est pas tres important)

    je sais pas si j'ai ete claire (je suis pas tres doué pour cela)
    merci de votre aide

  2. #2
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    std::vector est ton ami.

  3. #3
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    84
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 84
    Par défaut
    Tes variables n'auront pas le nom variable1, variable2 etc... mais tu auras une variable de type vector à partir de laquelle tu accéderas à tes variables... Ce qui répond à ton problème...

  4. #4
    Membre émérite Avatar de mchk0123
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    816
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 816
    Par défaut
    Tu peux également faire :

    CAquisition* variables[n];

    n étant le nombre de variables

    Puis utiliser "variables[1]", "variables[2]", ... etc, partout
    ou voulait écrire à la place "variable1", "variable2", ...etc.

  5. #5
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Pas une aussi bonne idée que le vector.

  6. #6
    Membre émérite Avatar de mchk0123
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    816
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 816
    Par défaut
    Ca ce vaut.

  7. #7
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    salut,
    Citation Envoyé par mchk0123
    Ca ce vaut.
    Tout dépend si n est connu à l'avance ou s'il est suceptible d'évoluer fortement...

    S'il passe de 18 à 20 (meme si c'est plusieurs fois d'affillée), on peut se contenter d'un vecteur "C style", mais s'il varie régulièrement et que, surtout, tu ne peux pas déterminer à la conception meme une valeur maximale cohérente, tu as très largement intérêt à te tourver vers le std::vector, qui sera beaucoup plus simple d'utilisation... ne serait-ce parce qu'il s'occupe lui-même de l'allocation d'une taille correcte pour la mémoire
    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

  8. #8
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Je précises que de mon point de vue, la définition statique d'un "n" élevé si l'on ne sait pas déterminer un maximum à la conception présentera toujours le problème qu'on risque encore d'avoir besoin de ... n+1 éléments, et que l'allocation dynamique d'un tableau "C style" reste malgré tout beaucoup plus complexe que la gestion des variables au travers d'un std::vector

    Mais bon, meme si l'avis que je présente est, selon toutes vraissemblances, largement admis dans la communauté, il n'en reste pas moins un avis personnel que je n'oblige personne à suivre
    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

  9. #9
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Citation Envoyé par mchk0123
    Ca ce vaut.
    Ca ne se vaut pas du tout d'un point de vue efficacité et simplicité. Avec un tableau à la main, il ne fait pas oublier de le désallouer, un std::vector, c'est automatique.

  10. #10
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 296
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 296
    Par défaut
    Ca se vaut rien du tout. Les VLA ne sont pas supportés en C++.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  11. #11
    Membre émérite Avatar de mchk0123
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    816
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 816
    Par défaut
    Citation Envoyé par koala01
    Je précises que de mon point de vue, la définition statique d'un "n" élevé si l'on ne sait pas déterminer un maximum à la conception présentera toujours le problème qu'on risque encore d'avoir besoin de ... n+1
    Admet que pour n fixé par conception (table statique) ou par nécessité (architecture minimaliste, vielle version de compilateur, bibliothèque STL instable, ...) les tableaux C sont aussi une bonne idée.

    Et pour un débutant c'est mieux de commencer par faire du C avant de vouloir faire du C++.

  12. #12
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 646
    Par défaut
    Citation Envoyé par Luc Hermitte
    Ca se vaut rien du tout. Les VLA ne sont pas supportés en C++.
    Salut, c'est quoi un VLA exactement, je trouve que des sites ou ils disent qu''il faut pas le faire mais personne n'explique ce que c'est.

    Variable length array
    c'est ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #define n 10
    double *tab[n];
    ?

  13. #13
    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
    Non, dans ton code la taille du tableau est une constante, donc connue du compilateur, donc aucun problème, VLA ou pas.

    Les VLA c'est ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    int main()
    {
        int Taille;
        std::cin >> Taille;
     
        double Tab[Taille];
     
        return 0;
    }

  14. #14
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 646
    Par défaut
    Ok merci pour la précision.
    J'ai tester et j'ai une "expected constant expression" a la compilation.
    C'est bien ca?

    Mais et ca ca marche et je trouve que ca revient au meme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    double *tab;
    long size;
    size = 123;
    tab = new double[size];
    c'est pas bien?(je le fais)
    Sinon oui il faut faire le delete(pas comme le std::vector).

  15. #15
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 296
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 296
    Par défaut
    Citation Envoyé par mchk0123
    Admet que pour n fixé par conception (table statique) ou par nécessité (architecture minimaliste, vielle version de compilateur, bibliothèque STL instable, ...) les tableaux C sont aussi une bonne idée.

    Et pour un débutant c'est mieux de commencer par faire du C avant de vouloir faire du C++.
    Pour un débutant c'est mieux de savoir mettre en oeuvre des algos avant de savoir bidouiller la mémoire. Et bidouiller n'est pas comprendre.

    Quant au n, il n'était pas fixé à en lire la question.
    Citation Envoyé par OP
    n peut varier en fonction de situation.
    Donc non, la solution des VLA n'est pas acceptable, car le compilo est un compilo C++, ou alors il s'est trompé de forum.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  16. #16
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Citation Envoyé par mchk0123
    Et pour un débutant c'est mieux de commencer par faire du C avant de vouloir faire du C++.
    Ou pas.

  17. #17
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Il est clair qu'il est vraissemblalement plus facile de commencer par apprendre la programmation procédurale/séquentielle avant la programmation OO...

    Mais la raison est surtout que l' OO fait malgré tout appel à des concepts qui se trouvent également en procédural, et que cela permet de scinder les difficultés.

    Par contre, apprendre à faire du C++ "à la manière C" ne sera jamais une optique efficace d'apprentissage.

    Comme, d'apres la question N n'est pas fixé, il est donc bien plus opportun de conseiller au PO de s'orienter vers les std::vector plutot que de commencer à lui parler d'alllocation dynamique "C style" qui lui posera un maximum de problèmes s'il n'a pas déjà correctement assimilé les phénomènes induits par cette méthode...
    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

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

Discussions similaires

  1. [POO] Déclaration dynamique de variable membre
    Par fredrik dans le forum Langage
    Réponses: 10
    Dernier message: 01/09/2006, 08h12
  2. Réponses: 2
    Dernier message: 15/05/2006, 11h11
  3. Réponses: 6
    Dernier message: 29/04/2006, 20h37
  4. declaration dynamique dans une fonction
    Par gronaze dans le forum C
    Réponses: 7
    Dernier message: 13/03/2006, 10h06
  5. [Language]Nom dynamique de Variable
    Par brooks dans le forum Langage
    Réponses: 13
    Dernier message: 14/12/2005, 18h09

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