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 :

Problème de tableau de pointeurs


Sujet :

C++

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Mars 2006
    Messages : 18
    Par défaut Problème de tableau de pointeurs
    Bonjour,
    je pense avoir le bon algorithme mais je ne sais pas comment créer la deuxième dimension de mon tableau.
    Voici mon code :
    /*----------------------------classe herbe-----------------------------*/
    #ifndef CLASSHERBE__H
    #define CLASSHERBE__H

    #include<time.h>
    #include<iostream>

    using namespace std;

    class herbe
    {
    protected:
    int hauteur;
    int croissance;

    public:
    herbe(){set_taille(5);}


    void pousser(){hauteur=hauteur+10;}

    void set_taille(int i){hauteur=i;}

    void desherber(){hauteur=hauteur-5;}


    int get_taille(){return hauteur;}

    void edite(){
    cout<<"La hauteur de l'herbe est de "<<hauteur<<endl;
    }
    } ;
    #endif

    /*-------------------------classe terrain----------------------------*/
    #include <iostream>
    #include "classherbe.h"
    using namespace std;
    class terrain
    {
    herbe **h;

    public:
    terrain()
    {
    herbe *h[10]; //horizontal
    for (int i=0; i<10;i++) //vertical
    {
    herbe *h[i]=new herbe[10]; /!\problème/!\
    }
    }
    };

    int main()
    {
    return 0;
    }
    Merci d'avance.

  2. #2
    Invité
    Invité(e)
    Par défaut
    tu veux faire quoi exactement ?

    as tu pensé a la STL ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Mars 2006
    Messages : 18
    Par défaut
    C'est bon j'ai trouvé
    terrain()
    {
    h=new herbe*[10];

    for (int i=0;i<10;i++)
    {
    h[i]=new herbe[10];
    }
    }
    Quel est l'intéret de la STL ?

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par befast
    Quel est l'intéret de la STL ?
    de s'affranchir des allocations de mémoires dynamiques, de gérer ses propres pointeurs, au risque de touche de la mémoire qui n'est pas a nous et/ou de faire des fuites de mémoire...

  5. #5
    Membre Expert
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Par défaut
    Donc ?

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Mars 2006
    Messages : 18
    Par défaut
    Non pas résolu!
    Quelles sont les classes les plus appropriées pour les tableaux de pointeurs à deux dimensions? (vector...)?
    Car avec cette méthode pour la modification et pour la redéfinition de [][] c'est pas la joie !

  7. #7
    Invité
    Invité(e)
    Par défaut
    ben tu peux toujours y aller au vecteur de vecteur lol
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::vector<std::vector<MonType> >

  8. #8
    Membre Expert
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Par défaut
    Pour voir La panoplie de conteneurs STL voir le schéma à Laurent (alias loulou24)!

    schéma

    Sinon pas besoin de tableau 2d pour ton problème !
    Il faut faire un accès dans ton tableau 1d de ce style

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    // tableau 1D
    herbe *h;
     
    // accès en 2D
    int taille_tableau_x=10;
    int taille_tableau_y=10;
     
    for(int y=0;y<taille_tableau_y;y++)
      for(int x=0;x<taille_tableau_x;x++)
        h[(taille_tableau_x*y)+x];

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Mars 2006
    Messages : 18
    Par défaut
    Merci je vais tester ça ^^

  10. #10
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 290
    Billets dans le blog
    2
    Par défaut
    Ok pour le tableau 1D, mais il est toujours préférable d'utiliser un conteneur de la stl plutôt qu'un tableau 'C style'.

    cf ce fil par exemple.

  11. #11
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par r0d
    Ok pour le tableau 1D, mais il est toujours préférable d'utiliser un conteneur de la stl plutôt qu'un tableau 'C style'.
    Ah, on en revien a ma suggestion de début de la discussion quand j'ai soumis l'idée du std::map<>

  12. #12
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 290
    Billets dans le blog
    2
    Par défaut
    Je ne vois pas l'utilité d'une map (qu'elle soit std, mfc ou autre) ici

    Ensuite, et cela est trés personnel, je préfère une solution du style:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    //déclaration d'une classe C2DArray, qui n'est rien d'autre qu'un vecteur de vecteur de herbe*
    typedef std::vector<herbe*> HRow; //une colonne du tableau
     
    class C2DArray : public std::vector<HRow>
    {
    public:
    	C2DArray(void){};
    	~C2DArray(void){};
    };
    que l'on remplirait ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    C2DArray letableau;
    HRow row1; // une colonne
    herbe h1; // une herbe
    row1.push_back(&h1);
    latableau.push_back(row1);
    et que l'on parcourrait ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    for (C2DArray::iterator x  = terrain.begin(); x!=terrain.end(); ++x) 
    {
    	for (HRow::iterator it = (*x).begin(); it!=(*x).end(); ++it)
    	{
    		cout << *it << endl;
    	}
    }

  13. #13
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par r0d
    Je ne vois pas l'utilité d'une map (qu'elle soit std, mfc ou autre) ici
    ah merde, laisse tomber, j'me suis mélangé 2 threads...

  14. #14
    Membre Expert
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Par défaut
    r0d je ne crois pas que cela soit une bonne idée.

    Enfin cela peut être dangereux si par malheur C2DArray est casté en std::vector<HRow>.


    Autant faire un autre typedef, non ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    typedef std::vector<HRow> C2DArray;

  15. #15
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 290
    Billets dans le blog
    2
    Par défaut
    Oui, mais le but de créer une classe héritant de std::vector est de pouvoir implémenter des fonctionnalités spécifiques.

    L'exemple que j'ai donné est incomplet, c'était juste pour l'idée. Il est nécessaire, ensuite, de gérer correctement les accessions et les allocations. Par exemple, faire en sorte que tous les HRows aient la même longueur, proposer un constructeur plus explicite, surcharger les opérateurs d'acces aux pointeurs, et pourquoi pas, les iterateurs, etc.

    Cependant, et aprés réflexion, cette solution me semble un peu 'lourde'. Je n'ai jamais trouvé de solution pleinement satisfaisante pour l'implémentation d'un tableau à 2 dimensions. Et pis, à n dimensions (je vous laisse imaginer ce que donnerais le code que j'ai proposé pour un tableau à n dimension ). Eventuellement, en utilisant des templates... je ne sais pas.

  16. #16
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    258
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 258
    Par défaut
    Citation Envoyé par r0d
    Oui, mais le but de créer une classe héritant de std::vector est de pouvoir implémenter des fonctionnalités spécifiques.
    Sauf que les classes de la SL ne sont prevues pour en heriter. Elles n'ont entre autres pas de destructeur virtuel.

    Citation Envoyé par r0d
    Cependant, et aprés réflexion, cette solution me semble un peu 'lourde'. Je n'ai jamais trouvé de solution pleinement satisfaisante pour l'implémentation d'un tableau à 2 dimensions. Et pis, à n dimensions (je vous laisse imaginer ce que donnerais le code que j'ai proposé pour un tableau à n dimension ). Eventuellement, en utilisant des templates... je ne sais pas.
    Boost propose la classe multi_array, qui a l'air de faire ce que tu veux.

  17. #17
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 296
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 296
    Par défaut
    Citation Envoyé par roulious
    Sauf que les classes de la SL ne sont prevues pour en heriter. Elles n'ont entre autres pas de destructeur virtuel.
    Bien que cela soit en fait plus subtil que cela, c'est une excellente approximation.

    Autrement, pour les tableaux 2d et plus, mon heuristique simplifiée donne:
    - forme "rectangulaire" (toutes les lignes ont le même nombre de colonnes) => une classe dédié comme boost:multi_array
    - forme "irrégulière" -> vecteur de vecteurs (ou de strings)
    - objet mathématique (matrice, ...) => bibliothèque spécialisée (boost.uBLAS, Blitz++, ...)
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  18. #18
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Mieux vaut implémenter C2DArray en terme d'un std::vector, c'est plus propre à terme, donc utiliser une agrégation.

  19. #19
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Mars 2006
    Messages : 18
    Par défaut
    Je ne suis pas un gros chaud de la STL (pourtant je devrais car je suis en IUt informatique). J'ai réussi à faire ce que je voulais en utilisant un tableau 'C style'.
    Merci beaucoup pour votre aide ^^.

  20. #20
    Membre Expert
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Par défaut
    De rien

    Si c'est alors un petit clique sur le bouton en bas du thread
    Merci !

Discussions similaires

  1. Problème déclaration tableau de pointeur.
    Par BlackStitch dans le forum Débuter
    Réponses: 2
    Dernier message: 16/12/2014, 01h35
  2. Problème d'accès à un tableau de pointeur
    Par gronaze dans le forum C++
    Réponses: 2
    Dernier message: 24/11/2011, 10h02
  3. Réponses: 3
    Dernier message: 01/09/2011, 14h26
  4. [débutant] problème création tableau (pointeurs and Cie)
    Par olivier1209 dans le forum Débuter
    Réponses: 13
    Dernier message: 08/03/2009, 15h54
  5. Problème de tableau
    Par krfa1 dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 08/02/2005, 11h09

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