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 :

tableau multidimensionnel et new []


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2006
    Messages : 88
    Par défaut tableau multidimensionnel et new []
    Bonjour,
    pour la fac j'ai besoin de faire un tableau multidimentionnel de hauteur donnée mais dont les lignes n'ont pas toutes la même taille.
    le type est imposé :

    je fait donc pour la hauteur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    _monMachin = new Machin**[_hauteur+1];
    et puis pour chaques lignes je boucle et j'alloue suivant la taille de ligne concernée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    _monMachin[y] = new Machin*[nbElem];
    Ensuite chaque case doit pointer sur un objet soit sur NULL.
    Je trouve ca laborieux et j'aimerais pouvoir au moment de l'allocation de la ligne mettre tous les pointeurs à NULL puis ensuite traiter les cases qui sont interessantes.
    J'ai vu qu'il était possible de surcharger l'operateur new[] mais je ne sais pas exactement comment faire ...

    A l'heure actuelle, sur mes tests le tableau a 17 cases en hauteur pour un total de 109 cases en tout à traiter ...
    Si j'arrive à traiter une ligne entière d'un coup et vu que toutes les cases non NULL pointent sur un même objet ca ne me ferai plus boucler que 17 fois et non 109...

    En C il y calloc qui peut permettre de mettre tous les éléments à une valeur déterminée mais en C++ je sais pas.
    Comment puis je faire ?
    Merci d'avance
    Gwenhaël

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    717
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 717
    Par défaut
    Pour les tableaux utilise plutôt std:vector, c'est plus facile à utiliser, et sa fonction resize() met tous les nouveaux éléments à NULL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    std:vector< std::vector<Machin*> > _monMachin(_hauteur+1);
    _monMachin[y].resize(nbElem);

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2006
    Messages : 88
    Par défaut
    Citation Envoyé par Sylvain Togni
    Pour les tableaux utilise plutôt std:vector, c'est plus facile à utiliser, et sa fonction resize() met tous les nouveaux éléments à NULL :
    Je suis parfaitement d'accord avec toi ... Seulement comme je le disais dans le premier poste le type de _monMachin doit être obligatoirement :
    C'est imposé dans le sujet ...
    Me demande pas pourquoi ... On nous force à utiliser des char * au lieu de String alors plus rien ne m'étonne ...
    L'aprentissage du C++ à grand coup de C je trouve ça très moyen ...

    Gwenhaël

  4. #4
    Membre émérite

    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    717
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 717
    Par défaut
    Je compati !
    Alors j'opterai pour une fonction libre qui fait le new et l'initialisation à NULL.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2006
    Messages : 88
    Par défaut
    Merci pour la compassion
    En fait entre temps j'ai réussit à surcharger new[] et delete[].
    Mais je n'arrive pas à savoir si on peux fournir une seconde valeur à new[] (en plus de la taille, pour spécifier qu'elle doit être la valeur à attribuer à la case...
    Gwenhaël

  6. #6
    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
    A mon avis tu peux oublier la surcharge de new, ça ne sert absolument pas à ça. D'ailleurs comment ferais-tu pour faire la distinction entre une allocation de ta classe Machin et une autre allocation, dans ta surcharge ?

    Si tu veux t'économiser une ligne lors de l'initialisation à NULL, tu peux utiliser std::fill_n.

Discussions similaires

  1. Réponses: 2
    Dernier message: 08/12/2005, 14h41
  2. Réponses: 2
    Dernier message: 27/11/2005, 23h36
  3. Nombre de dimensions d'un tableau multidimensionnel
    Par Bruno75 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 08/07/2005, 10h03
  4. type de donnée tableau multidimensionnel
    Par opheliegomes dans le forum Débuter
    Réponses: 2
    Dernier message: 03/02/2005, 12h29
  5. [langage] tableau multidimensionnel
    Par totox17 dans le forum Langage
    Réponses: 3
    Dernier message: 03/12/2002, 15h58

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