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 :

reference sur tableau N dimensions


Sujet :

C++

  1. #1
    Membre habitué Avatar de harsh
    Inscrit en
    Février 2005
    Messages
    229
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 229
    Points : 193
    Points
    193
    Par défaut reference sur tableau N dimensions
    Bonjour,

    Imaginons que j'ai plusieurs tableaux 2 dimensions de meme taille (par exemple 3x3). En fonction de mes cas j'aimerais pouvoir utiliser l'un ou l'autre sans reecrire 10 fois le meme code ou sans recopier 10 fois le contenu du bon tableau case par case dans mon tableau avec lequel je travaille

    Donc un truc du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    double tab1 [3][3] =...
    double tab2 [3][3] =...
    ....
    double & tabRef[3][3];    // pas correcte puisque veut dire un tableau de refence de double
    ....
    if (...)
      tabRef = tab3;
    Une solution????
    Avant de poser une question, lire la Avant de répondre, lire la question

  2. #2
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    Salut !

    puisque tu es en C++, pourquoi ne pas utiliser des vector plutôt (ou des boost::array si tu utilises boost et que tu tiens à ce qu'ils soient de taille fixe ) ?

    C'est bien plus pratique... surtout au niveau de la copie

    en plus, ce que tu souhaites faire, n'est pas possible : une référence doit être référencée à sa construction... sinon il te faudra un pointeur...

    Bon, bien sûr, le mieux, ça serait encore que tu te fasse ou que tu trouve une vraie classe Matrice...

    sinon, une référence d'un tableau double[3][3] logiquement, ça serait :
    mais je doute que ça fonctionne :\
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag (en bas)

  3. #3
    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
    Citation Envoyé par Swoög
    sinon, une référence d'un tableau double[3][3] logiquement, ça serait :
    mais je doute que ça fonctionne :\
    je ne connais pas la syntaxe exacte, mais le mieux est, je pense, de passer par un typedef:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    typedef double NEUF_DOUBLES[3][3];
    NEUF_DOUBLE &ref
    Mais à présent, à quoi servira cette référence? N'oublions pas que hors d'une structure, les tableaux sont passés par adresse...
    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.

  4. #4
    Membre habitué Avatar de harsh
    Inscrit en
    Février 2005
    Messages
    229
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 229
    Points : 193
    Points
    193
    Par défaut
    A eviter de copier les elements d'un tableau dans un autre, donc a ne manipuler que des adresse.
    Avant de poser une question, lire la Avant de répondre, lire la question

  5. #5
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if (...)
      tabRef = tab3;
    ne fera pas ce que tu sembles penser : on n'affecte pas une référence (cela affecte l'objet référencé).

    Pour ce genre de joyeusetés, il faut utiliser des pointeurs.
    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.

  6. #6
    Membre habitué Avatar de harsh
    Inscrit en
    Février 2005
    Messages
    229
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 229
    Points : 193
    Points
    193
    Par défaut
    Oui mais on ne gere pas des tableaux de plus d'une dimension avec des pointeurs...
    Ou peut etre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    float tab [3][3] = {...};
    float * ref [3];
    ...
    ref = tab;    // ?????  ou ref = &tab[0] qui devrait etre la meme
    Avant de poser une question, lire la Avant de répondre, lire la question

  7. #7
    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à, il faut des parenthèses (voir passage en gras).
    Ou mieux, des typedefs.
    Code C/C++ : 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
    double tab[3][3]; /*ou NEUF_DOUBLES tab, même chose*/
    
    /*Pointeur de tableau :*/
    typedef double NEUF_DOUBLES[3][3];
    NEUF_DOUBLES *ref; /*ou double (*ref)[3][3] : pareil mais moins explicite.*/
    ref = &tab;
    
    /*On y accède avec */
    (*ref)[a][b] = c;
    
    /* Ou pointeur de ligne */
    typedef double TROIS_DOUBLES[3];
    TROIS_DOUBLES *refLigne; /* ou double (*refLigne)[3] : pareil mais moins explicite */
    refLigne = tab; /* ou refLigne = &tab[0] */
    
    /* On y accède avec */
    refLigne[a][b] = c;
    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.

  8. #8
    Membre habitué Avatar de harsh
    Inscrit en
    Février 2005
    Messages
    229
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 229
    Points : 193
    Points
    193
    Par défaut
    quelle serait la signification de
    [code]
    double (*ref) [3][3];
    [\code]
    sans les parentheses?

    Merci pour les reponses
    Avant de poser une question, lire la Avant de répondre, lire la question

  9. #9
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    un tableau 3x3 de double*
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag (en bas)

  10. #10
    Membre habitué Avatar de harsh
    Inscrit en
    Février 2005
    Messages
    229
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 229
    Points : 193
    Points
    193
    Par défaut
    Ouaip... c'est la que commence la polemique, su peut etre ete plus intelligent de definir les pointeur de types comme des types propres et permettre d'ecrire par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    double* pointeur1, pointeur2, pointeur3...
    Dans notre cas cela n'aurait il pas ete plus en accord avec les regles de priorités?

    Mais ceci est un autre sujet... celui qui nous concerne est RESOLU

    Avant de poser une question, lire la Avant de répondre, lire la question

  11. #11
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    c'est une des caractéristiques du C et par là même, du C++...

    En discuter (une nième fois) ne modifiera pas grand chose... c'est comme ça et c'est tout, inutile de refaire un Xième troll sur le sujet, ils sont déjà suffisament nombreux^^
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag (en bas)

  12. #12
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    double & tabRef[3][3]; // pas correcte puisque veut dire un tableau de refence de double
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    double (&tabRef)[3][3];
    Boost ftw

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

Discussions similaires

  1. [XL-2007] Boucles sur tableau à deux dimensions
    Par Slavo dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 08/03/2014, 16h10
  2. [XL-2010] Aide sur tableau 2 dimensions
    Par daddygraffiti dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 21/11/2013, 17h24
  3. array unique sur tableau 2 dimensions
    Par piero53 dans le forum Langage
    Réponses: 14
    Dernier message: 05/03/2010, 11h26
  4. Tri sur tableau à 2 dimensions
    Par Poussy-Puce dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 03/03/2006, 19h36

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