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 a 2 dimensions en c++


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de sylvain.cool
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    242
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 242
    Par défaut [*]tableau a 2 dimensions en c++
    Bonjour,
    je voudrais faire un tableau en 2 dimensions en c++.
    voici l'equivalent en C de ce que je voudrais faire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
            int ** m_pHoleMap;
    	m_pHoleMap=(int **)malloc(sizeof(int*)*nbLines);
    	for(int i=0;i<nbLines;i++){
    		m_pHoleMap[i]=(int*)malloc(sizeof(int)*nbColumns);
    		for(int j=0;j<nbColumns;j++)
    			m_pHoleMap[i][j]=-1;
    	}
    mais le malloc ca fait pas trop C++.
    J'ai pense a un truc du style:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
            int ** m_pHoleMap=new int[nbLines][nbColumns];
    mais ca ne marche pas.
    Si vous avez des suggestions.
    Merci d'avance

  2. #2
    Membre Expert
    Avatar de Woufeil
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 1 076
    Par défaut
    Salut,

    Inspire toi de ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    int** m_pHoleMap=new int*;
    for (int i = 0; i< nbLignes; i++) 
    {
       for (int j= 0; j<nbColumns; j++)
       {
           m_pHoleMap[i][j] = -1;
       }
    }
    Ce code créé une matrice et remplit toutes ses cases avec -1 comme tu t'en doutais

  3. #3
    Rédacteur
    Avatar de Bakura
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2005
    Messages
    1 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 386
    Par défaut
    Berk. Pourquoi ne pas utiliser des vectors de vectors ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    std::vector <std::vector <int> > tab2D;
    const size_t nbLignes = 5;
    const size_t nbColonnes = 6;
    tab2D.resize (nbLignes); // On crée un tableau de 5 lignes
     
    for (size_t i = 0 ; i < nbLignes ; ++i)
    {
       tab2D.resize (nbColonnes); // Dans chaque ligne, 6 colonnes
          for (size_t j = 0 ; j < nbColonnes ; ++j)
          {
             tab2D[i][j] = -1;
          }
    }
    EDIT : ou plus simplement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    const size_t nbLignes = 5;
    const size_t nbColonnes = 6;
    std::vector <std::vector <int> > tab2D (nbLignes, nbColonnes);
     
       for (size_t i = 0 ; i < nbLignes ; ++i)
          for (size_t j = 0 ; j < nbColonnes ; ++j)
          {
             tab2D[i][j] = -1;
          }
    J'avais un doute mais ça marche aussi.

  4. #4
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    salut

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    int** m_pHoleMap=new int*;
    for (int i = 0; i< nbLignes; i++) 
    {
       for (int j= 0; j<nbColumns; j++)
       {
           m_pHoleMap[i][j] = -1;
       }
    }
    tu t'es trompé dans les new

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    int** m_pHoleMap=new int*[nbLignes];
    for (int i = 0; i< nbLignes; i++) 
    {
       m_pHoleMap[i] = new int[nbColumns];
       for (int j= 0; j<nbColumns; j++)
       {
           m_pHoleMap[i][j] = -1;
       }
    }
    et pour desallouer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    int** m_pHoleMap=new int*;
    for (int i = 0; i< nbLignes; i++) 
       {
          delete [] m_pHoleMap[i];
       }
    delete [] m_pHoleMap;
    m_pHoleMap = NULL;// ne sert pas vraiment
     
    }

  5. #5
    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
    Pour ceux qui veulent faire des new[] (N +1), la réponse correcte est dans la FAQ.

    Sinon rien ne vaut la réutilisation de ce qui a déjà été intensément validé : vector<vector<>>, boost::multi_array, stlsoft::arraynd (?), Blitz++, boost.ublas, Newmat, ...
    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...

  6. #6
    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
    En effet, boos::multi_array est trés pratique.
    Sinon, pour rester dans la STL, tu peux jeter un coup d'oeil à ce post

  7. #7
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    366
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 366
    Par défaut
    Citation Envoyé par Luc Hermitte
    Sinon rien ne vaut la réutilisation de ce qui a déjà été intensément validé : vector<vector<>>, ...

    Le vector< vector<> > n engendre t il pas des reallocation en cascade ? :

    que le premier vecteur doit etre realloue , il implique une recopie de sont contenu donc allocation pour le nouveau vecteur + copie + liberation de l ancien vecteur

  8. #8
    Membre Expert
    Avatar de coyotte507
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 327
    Par défaut
    sinon si tu veux un statique tu peux faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int mp_holemap[nblignes][nbcolonnes]
    Je crois que par contre si tu mets "strict ISO c++" en option de compilation ca marche pas

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 26/11/2005, 19h55
  2. Réponses: 13
    Dernier message: 13/10/2005, 16h03
  3. Tableau a trois dimension!!!
    Par krfa1 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 03/10/2005, 15h52
  4. Réponses: 1
    Dernier message: 30/09/2005, 19h17
  5. [Tableau]comment connaitre la taille d'un tableau à 2 dimensions
    Par Kyti dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 22/04/2005, 10h27

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