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 :

Tableaux dynamiques comme en php


Sujet :

C++

  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

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

    Informations forums :
    Inscription : Février 2006
    Messages : 134
    Par défaut Tableaux dynamiques comme en php
    Bonjour a tous,

    J'ai une question sans doutes basique, mais importante pour mes algos.

    Je voudrais savoir comment déclarer un tableau en C/C++ de maniéré a ce que le nombre d'éléments soit variable en cours d’exécution.

    J'ai vu que l'interpréteur php utilisait les listes chainés pour reproduire ce comportement. (un peu lourd a implementer)

    Par ailleurs je crois que les vecteurs peuvent répondre a ce besoin... mais es ce la bonne solution pour faire cela?

    J'aimerais aussi que les indices de mes tableaux puissent etre des chaines de carractères (comme les array php)

    Merci pour vos retours =)

  2. #2
    Expert confirmé

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 032
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 032
    Billets dans le blog
    12
    Par défaut
    Si tes tableaux sont voués à cahnger fréquemment de taille, effectivement la liste chainée et le meilleur choix (std::list) sinon, un vecteur fera l'affaire (std::vector)
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 146
    Billets dans le blog
    4
    Par défaut
    Si tu souhaites utiliser des chaînes de caractère comme index, il faudra se tourner vers les map.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  4. #4
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Salut,
    Je joins ma voix au choeur de mes camarades pour te recommander de piocher dans un conteneur de la STL.

    Cette entrée de la F.A.Q. pourra peut-être t'aider :
    Quel conteneur choisir pour stocker mes objets ?

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

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

    Informations forums :
    Inscription : Février 2006
    Messages : 134
    Par défaut
    Merci pour vos réponses. Je vais regarder tout ca de plus près. Mais dans la mesure ou j'aurais, dans le cadre de mon programme, besoin de parcourir systématiquement l'intégralité des objets je pensais utiliser des listes simplement chainés. =)

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 146
    Billets dans le blog
    4
    Par défaut
    Tableau et liste n'ont pas la même utilisation.

    Si tu souhaites juste les stocker pour les parcourir, alors oui la liste suffira.
    Là encore, c'est que si tu comptes la parcourir de bout en bout, ou en tous cas depuis le départ, à chaque fois.

    Les tableaux et leurs index permettent d'accéder rapidement à un élément donné.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  7. #7
    Membre émérite
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2009
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2009
    Messages : 552
    Par défaut
    Bonjour,

    Je confirme que ce qui se rapproche le plus du tableau associatif PHP est la MAP de la STL. Avec la std::list, tu auras l'équivalent du parcours en foreach mais pas l'accès par clé ( $tableau["cle"] ).

    Toutefois, lorsque les clés sont des entiers (array( "toto","titi", "tata")), il est préférable d'utiliser un std::vector (contrairement à ce qu'on a en PHP, tu n'auras jamais de trou dans tes indices)

    Là où tu vas rencontrer des soucis, c'est pour introduire le type dynamique pour stocker les valeurs de ton tableau.

    Plusieurs axes sont alors possibles :
    - Créer une hiérarchie de type
    - Utiliser des choses du type boost::variant
    - Te baser sur une bibliothèque qui introduit un type dynamique (style Qt, QVariant)

    Bon courage!

    N.B. : Si tu as souvent besoin de manipuler des données que tu connais mal avant l'exécution, tu vas devoir réinventer la roue présente dans les langages qui disposent d'un Object père de tous les objets (Python, Java, C#, C++/CLI, etc.).

  8. #8
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

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

    Informations forums :
    Inscription : Février 2006
    Messages : 134
    Par défaut
    Merci pour toutes ces réponses!!!

    J'ai expérimenté quelques conteneurs de la STL et c'est vrai que c'est magique!!!

    Bon c'est vrai que ce n'est pas aussi souple que le array de php mais bon on ne peut pas tout avoir.

    Effectivement le problème de types variant peut vite se poser... Je n'ai pas encore rencontré ce cas car pour le moment je manipule des objets dans mes vecteurs.

    D'ailleurs es ce qu'un vecteur est une donnée a part entiére ou es ce que c'est un pointeur ? J'veu dire si je passe mon tableau a une fonction/methode, faut il (pour les perfs) le faire par référence?

  9. #9
    Expert confirmé

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 032
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 032
    Billets dans le blog
    12
    Par défaut
    std::vector est une classe, donc le mieux est de le passer par référence (constante ou non)
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  10. #10
    Membre éprouvé Avatar de Xtrem_Voyageur
    Homme Profil pro
    Inscrit en
    Juin 2009
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2009
    Messages : 85
    Par défaut
    Tu peux passer un std::vector<T> par adresse si tu le souhaites, car son implémentation en mémoire est toujours contigüe, cela ne posera pas de problème, c'est d'ailleurs le conteneur choisi pour interférer avec les API C, la seule chose dont il faille se méfier alors est qu'il ne soit pas vide.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void function(double *pd, int SIZE) { ...someTreatment...}
    std::vector<double> vd;
    if(!vd.empty())
        function(&vd[0],vd.size());

Discussions similaires

  1. Réponses: 4
    Dernier message: 27/02/2008, 09h46
  2. GUI dynamique comme en PhP
    Par JoGoiA dans le forum Interfaces Graphiques en Java
    Réponses: 10
    Dernier message: 11/09/2006, 02h49
  3. [Tableaux] CheckBox dynamique, possible en php?
    Par Gumpy dans le forum Langage
    Réponses: 5
    Dernier message: 07/02/2006, 11h46
  4. Article sur les tableaux dynamiques
    Par Eric Sigoillot dans le forum Langage
    Réponses: 2
    Dernier message: 16/04/2004, 22h00
  5. [Kylix] Tableaux dynamiques sour Kylix2
    Par Krän dans le forum EDI
    Réponses: 6
    Dernier message: 07/10/2003, 14h31

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