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++/CLI Discussion :

Tableau unidimensionnel dans une structure


Sujet :

C++/CLI

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2011
    Messages : 107
    Points : 66
    Points
    66
    Par défaut Tableau unidimensionnel dans une structure
    Bonjour,

    Je souhaite avoir une structure S2 qui contienne un tableau unidimensionnel (dont je ne connais pas la dimension) d'une autre structure.

    1ère structure:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    struct S1
    {
    	double a;
    	bool Unique;
    };
    2ème structure:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    struct S2
    {
    	double a;
    	int b;
    	S1 TableauUnidimensionnel[];
    };
    Malheureusement l'écriture de la structure S2 bug au niveau de "S1 TableauUnidimensionnel[];"

    Comment faire pour ne pas préciser la taille du tableau au départ dans S1, mais uniquement par la suite ?

    Merci de votre aide

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    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 : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    l'écriture de la structure S2 bug
    Sois plus explicite.


    Dans tous les cas, quand ça ne marche pas avec une taille non-spécifiée ou nulle, on met une taille de 1. Vu que dans tous les cas, il faut faire une allocation dynamique avec malloc() ou ::operator new() pour allouer la bonne taille...

    Et la bonne taille sera calculée avec une formule du genre offsetof(S2, TableauUnidimensionnel) + nbElements * sizeof(S1).
    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 du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2011
    Messages : 107
    Points : 66
    Points
    66
    Par défaut
    Je pense faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    struct S2
    {
    	double a;
    	int b;
    	S1 T[];
    };
    J'ai lu que la taille du tableau ne pouvait plus être modifiée après un malloc(Est-ce vrai ?)

    Et si on réutilise malloc une seconde fois pour redimensionner le tableau, est-ce que les valeurs du tableau seront perdues ou simplement tronquées si la dimension est plus petite que l'initiale?
    Et que se passe t-il lorsqu'on augmente la dimension avec un second malloc, les valeurs initiales sont-elles conservées?
    Enfin, dernière question, l'utilisation de vector qui permet des dimensions variable est-elle plus ou moins rapide qu'un tableau [] à l'exécution du code?

    Merci.

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 073
    Points : 12 119
    Points
    12 119
    Par défaut
    On est dans la section C++/CLI, donc pourquoi ne pas utiliser un Array .NET ?

    J'ai lu que la taille du tableau ne pouvait plus être modifiée après un malloc(Est-ce vrai ?)
    S'il est alloué dans le tas avec un malloc, oui.

    Mais les réallocations sont possibles :
    http://www.cplusplus.com/reference/cstdlib/realloc/

    En C++, les std::vector sont à privilégier par rapport aux tableaux C.

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2011
    Messages : 107
    Points : 66
    Points
    66
    Par défaut
    En fait, je souhaite avoir le code le plus rapide, donc je ne sais pas si l'utilisation Array est plus rapide qu'un tableau avec [] , ou l'inverse? ou bien des vector ?

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 073
    Points : 12 119
    Points
    12 119
    Par défaut
    Premature optimization is the root of all evil -- DonaldKnuth

    Favorisez toujours les outils de hauts niveaux, ils sont plus flexible que ceux de bas niveau et donc plus facilement utilisable dans les chantiers de refactorisation liés aux optimisations.

    On n'optimise pas on programme qui ne fonctionne pas et quand on l'optimise, c'est dans un contexte d'utilisation bien précis.

    Avant tous, il faut optimiser l'architecture pour qu'elle soit adaptable aux besoins concrets.

    Deplus, l'overhead du std::vector est très faible s'il est correctement utilisé.

    Si vous utilisez des tableaux à la C, il vous restera à votre charge beaucoup de travail qui a déjà été fait dans std::vector et dont les implémentations ont été faites par des cadors du C++.
    C'est vous qui voyez, mais pour moi, c'est tout vu.

  7. #7
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2011
    Messages : 107
    Points : 66
    Points
    66
    Par défaut
    Bon, je vais utiliser ce qui existe déjà: std::vector ou Array.

    Mais entre ces 2 définitions, quelle est celle qui a un code plus rapide?

  8. #8
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 073
    Points : 12 119
    Points
    12 119
    Par défaut
    Premature optimization is the root of all evil -- DonaldKnuth Bis
    Chasser le naturel, il revient au gallop.

    Ce n'est JAMAIS la bonne question pour choisir une structure de données.

    Il faut que vous vous mettiez dans le crâne que la structure la plus adaptée est fonction des algorithmes utilisés et de la nature des données.

    Il n'y a donc, dans l'absolue, aucun structure de données plus rapide qu'une autre.

    Vous choisissez l'algorithme puis la structure en fonction de celui-ci.

    Un std::vector a une taille variable tandis qu'un std::array à une taille connue à la compilation.

    Si "Array" pour ma remarque pour C++/CLI et .NET, n'utiliser le Framework .NET que si cela est nécessaire, et là, cela ne semble pas le cas et votre question est dans la mauvaise zone du forum, ici c'est C++/CLI.

Discussions similaires

  1. Réponses: 7
    Dernier message: 17/01/2012, 17h01
  2. Réponses: 11
    Dernier message: 09/02/2010, 11h42
  3. parcourir un tableau dynamique dans une structure
    Par brunolekid dans le forum C
    Réponses: 4
    Dernier message: 23/10/2009, 15h24
  4. Réponses: 4
    Dernier message: 11/02/2008, 18h03
  5. Réponses: 7
    Dernier message: 21/12/2005, 16h44

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