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 :

Tableaux de données en C++


Sujet :

SL & STL C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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 : 40
    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 de données en C++
    Bonjour.

    En ce moment je developpe ennormement en php. J'utilise tout le temps les tableaux de données. Ce que je recherche c'est de savoir quel type de données C++ se raproche le plus des Array de php. c'est a dire pouvoir inserer des elements un peu comme on veux et pouvoir melanger des types de données. et eventuellement avoir des libelés comme noms de cases et pouvoir faire des print_r enfin dites moi vos idées.

    Il se peut que ca n'existe pas du tout, meme pas d'equivalents... dans ce cas dites moi si vous savez coment positionner l'architecture afin de s'en rapprocher au maximum.

    Le but est de pouvoir traiter en C++ des données formatées JSON

    Un collegue m'a parlé des maps. qu'en pensez vous?

    Merci =)


  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    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 395
    Par défaut
    Je ne sais pas trop ce qu'est un Array PHP.

    En C++, les conteneurs principaux sont:
    • vector: L'équivalent d'un tableau C, en mieux. Accès aléatoire instantané, insertion lente (O(n)) et ajout à la fin pouvant soit être instantané, soit en O(n) (s'il faut réallouer le tableau).
    • list: Liste chaînée. Accès séquentiel, insertion instantanée.
    • map: Tableau associatif trié. C'est stocké sous forme d'arbre, donc accès et insertion en O(log(n)).

    Dans ces conteneurs, on ne peut mettre que des données du même type. Mais ce type peut être une structure contenant des données de type différent, évidemment... Et la map n'est pas obligée d'avoir le même type pour la clé et la valeur. Simplement, toutes les clés doivent être du même type, et toutes les valeurs pareil.
    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.

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    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 hmmmm
    Bonjour merci pour ta reponse.

    Juste pour vous montrer de maniere generale ce qu'on peut faire directement en php:

    voici un bout de code:
    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
    22
    23
    24
     
    <?php
     
    //declaration d'un tableau
    $table = array();
     
    $table['PRODUIT'] = "Lecteur DVD";
    $table['PRIX'] = 37.95;
    $table['QUANTITE'] = 2;
    $table['CARRACTERISTIQUES']['POIDS'] = 1.7;
    $table['CARRACTERISTIQUES']['HDMI'] = true;
    $table['CARRACTERISTIQUES']['DIMENSIONS']['L'] = 30.5;
    $table['CARRACTERISTIQUES']['DIMENSIONS']['H'] = 4.3;
    $table['CARRACTERISTIQUES']['DIMENSIONS']['l'] = 20.2;
     
    // declaration d'un autre tableau
    $table_produits = array();
    $table_produits[1] = $table;
    $table_produits[2] = $table;
     
    // affiche le tableau avec un parcour recursif (interne a php)
    print_r ($table_produits);
     
    ?>

    Le resultat obtenu sera le suivant:
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     
    Array
    (
        [1] => Array
            (
                [PRODUIT] => Lecteur DVD
                [PRIX] => 37.95
                [QUANTITE] => 2
                [CARRACTERISTIQUES] => Array
                    (
                        [POIDS] => 1.7
                        [HDMI] => 1
                        [DIMENSIONS] => Array
                            (
                                [L] => 30.5
                                [H] => 4.3
                                [l] => 20.2
                            )
     
                    )
     
            )
     
        [2] => Array
            (
                [PRODUIT] => Lecteur DVD
                [PRIX] => 37.95
                [QUANTITE] => 2
                [CARRACTERISTIQUES] => Array
                    (
                        [POIDS] => 1.7
                        [HDMI] => 1
                        [DIMENSIONS] => Array
                            (
                                [L] => 30.5
                                [H] => 4.3
                                [l] => 20.2
                            )
     
                    )
     
            )
     
    )
    Voila c'est un bout de code qui fonctionne directement en php natif. les labels des clefs sont declarés directement a la volée, et si l'on transmet le tableau a une autre fonction ces clefs sont evidement conservées.

    c'est un type de format tres pratique pour pas mal de choses. Finalement ce n'est rien d'autre qu'un arbre avec la possibilité de stocker des types qu'on veux.

    Donc en C++ qu'es ce qui se rapprocherai le plus de ca? Je suppose que ce sont les maps mais es ce bien ca?

    Merci

  4. #4
    Membre expérimenté
    Profil pro
    Dev
    Inscrit en
    Décembre 2007
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dev

    Informations forums :
    Inscription : Décembre 2007
    Messages : 191
    Par défaut
    L'idée de la map c'est simplement une Liste d'objets, triés selon une certaine Clé. C'est-à-dire un tableau associatif. On t'a conseillé cela pour l'aspect "asssocier une chaine et une certaine valeur ", mais c'est tout ce qu'il y a de ressemblant. En effet, on ne peut pas faire ce genre de choses simplement en C++.

    Une map (ou tout autre tableau) doit absolument contenir des "objets" du meme type. (uniquement des int par exemple, mais pas des chaines de caracteres et des ints mélangés). Bien sur les objets d'une map et leur clé peuvent etre de type différent, mais tous les objets doivent etre du meme type de leur coté, ainsi que toutes les clés.

    Après, on peut jouer avec le polymorphisme des classes C++ de sorte que ça se rapproche de ton écriture. Je sais que le PHP sert à créer dynamiquement des pages web avec des bases de données, mais je ne sais pas s'il est "orienté objets" ou pas. Si oui tu pourras apprendre la manière de créer des classes assez rapidement. Sinon ça va être un gros chapitre à apprendre.

    Par contre : meme avec le polymorphisme je doute que tu puisses arriver à une écriture aussi simple.

  5. #5
    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 : 50
    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
    Par défaut
    Visiblement, le C++ est plus statiquement typé que PHP. Ce que tu veux faire n'est donc pas directement possible. Le plus compliqué n'est pas de mettre dans le tableau, mais d'utiliser ce qui y a été mis. En particulier, comment le compilateur pourrait-il savoir que le code :

    Est valide, alors que :

    Ne l'est pas. Un compilateur C++ a besoin de savoir ce genre de choses au moment de la compilation.

    Il y a des moyens de détourner cet aspect statique, en utilisant une solution à base de pointeurs et de cast, et l'écriture la plus proche d'une écriture non typée serait alors du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int q = mon_cast<int> (table["QUANTITE"]);
    q++;
    mon_cast étant une opération qui en interne utilise le static_cast ou reinterpret_cast du C++, mais qui éventuellement fait des choses en plus, comme tester que ce que tu as promis au compilateur (ma donnée, en fait, c'est un int) est vraie (par exemple en ajoutant à chaque donnée un indicatuer permettant de tester son type).

    Pour avoir des types de donnée dans lesquels on peut mettre n'importe quoi, une solution pré-packagée existe déjà, regarde du côté de boost::any ou boost::variant.

    S'il n'y a en pratique que 2-3 types différents à gérer, une solution à partir d'une classe de base et de classes dérivées qui wrapent les vrais types serait probablement plus simple à mettre en oeuvre, et faciliterait des traitements génériques sur tous le types, comme par exemple l'affichage.
    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.

  6. #6
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    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 Ok ok
    Merci bien pour toutes ces reponses.

    Juste a titre d'info : Le php supporte la POO. donc on peut developper avec des classes et des choses comme ca.

    Bon en fait il n'y a pas reelement de solution simple. Pour vous dire la verité je connais bien le C, et je connais C++ pas trop trop mal en ce quii conserne la POO. Cependant je ne connais pas du tout la STL et les fonctions nouvelles qui apparaissent en C++. En fait je suis le genre de programmeur qui va mettre des char* en C++. =/

    Donc c'est surtout pour ca que je me demandais s'il existait des gestionnaires d'arbo en c++.

    Et a titre d'info le language PHP est tres peu typé, pour ne pas dire pas du tout typé. D'ailleurs souvent ca crée des desagrements.

    Donc voila.

    Merci beaucoup une fois de plus pour toutes ces reponses. Je vais un peu regarder ce que vous m'avez conseillé, mais bon de toute maniere il s'agit de bidouiller et d'essayer d'adapter des choses...

Discussions similaires

  1. [Tableaux] les données de la table en lien
    Par afrodje dans le forum Langage
    Réponses: 5
    Dernier message: 02/05/2007, 15h13
  2. [Tableaux] inscrire donnée das un tableau unique
    Par manciaux dans le forum Langage
    Réponses: 9
    Dernier message: 01/09/2006, 10h37
  3. Dll et tableaux de données
    Par paradise dans le forum Delphi
    Réponses: 4
    Dernier message: 03/07/2006, 19h05
  4. [Tableaux] Afficher donnée
    Par covin85 dans le forum Langage
    Réponses: 39
    Dernier message: 29/04/2006, 00h57
  5. [Tableaux] floatval() donne toujours 0 :(
    Par Torpedox dans le forum Langage
    Réponses: 1
    Dernier message: 30/12/2005, 17h28

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