tableau 2D dynamique

tableau 2D dynamique - C++ - Programmation

Marsh Posté le 13-01-2013 à 12:13:03    

Bonjour...
 
j'ai créé un tableau 2D dynamique du type d'une de mes classes. le types contient un int et un char(qui sont des attributs private de la classe Ordi).  
Le tableau en question a pour dimension h * l (que j'ai défini au préalable).
 
     Ordi **tab = new Ordi*[h];
          for(int i=0;i<h;++i)
          tab[i]=new Ordi[l];
 
    for (int i = 0; i < h; ++i)
      delete[] tab[i];
      delete[] tab;
     
 
je me demande comment initialiser par defaut toutes les cases de mon tableau au valeurs  :  (12,"X" )
De plus, mon tableau est il effectivement dynamique ?
Votre aide sera la bienvenue  :jap:


Message édité par wuxiaowei le 13-01-2013 à 12:26:09
Reply

Marsh Posté le 13-01-2013 à 12:13:03   

Reply

Marsh Posté le 13-01-2013 à 13:24:50    

Ton tableau n'est pas dynamique, dans le sens où la longueur max de ton tableau est limité par sa taille à l'initialisation.
Un tableau dynamique c'est un tableau où tu peux à tout moment, sans limite. Par exemple un vector est un tableau dynamique, un Ordi tab[h] est un tableau statique, même si il est initialisé dynamiquement
 
En c++11 il y a moyen d'initialiser des tableaux de struct avec des accolades, mais je n'ai jamais vraiment regardé...
Essaye de regarder par là : http://www.cplusplus.com/reference [...] izer_list/ ;)


---------------
Mods: HAF922 | Shinobi XL White    GitHub     Admin de La Colère d'Aurile, serveur RP-Action Neverwinter Nights 2
Reply

Marsh Posté le 13-01-2013 à 13:53:18    

bon j'ai utlisé vector pour recréer mon tableau. je doute de la bonne application.
 
vector<Ordi> tab(hauteur*largeur) ;
    tab.push_back(Ordi(12,"X" ));
 
Je pesne que le tableau est donc dynamique ? mais est ce comme ça qu'on initialise les cases ? :/
 

Reply

Marsh Posté le 13-01-2013 à 14:04:22    

Non, là vous ne faites qu'ajouter un élément.
 
Mais vous pouvez utiliser le constructeur qui remplit les valeurs :  
 

Code :
  1. std::vector<Ordi> tab(largeur*hauteur, Ordi(12, "X" ));

Reply

Marsh Posté le 13-01-2013 à 14:20:05    

Grille:Grille(int hauteur,int largeur)
{
   hauteur=18,largeur=6;
 
    vector<Ordi> tab(hauteur*largeur) ;
 
    std::vector<Ordi> tab(hauteur*largeur, Ordi(12,"X" ));
 
 
}
 
un constructeur dans un constructeur :s
 
 la ligne vector<Ordi> tab(hauteur*largeur) ;   cré bien un tableau dynamique ? ou j'ai loupé une étape ?
et pour l'initialisation je ne comprend rien. google n'est plus mon ami...

Reply

Marsh Posté le 13-01-2013 à 15:15:42    

Deux possibilités, si les 2 dimensions sont necessaires:
Soit ton tableau a des dimensions que tu ne connais pas a la compilation, mais qui sont déterminées à la création et qui ne bougent plus, et tu as le conteneur standard std::array pour cela, soit ton tableau a des dimensions qui bougent parce qu'on lui rajoute/enlève des éléments, et tu as (entre autres) le conteneur std::vector pour cela, soit une des dimensions est fixée et pas l'autre, et tu peux employer un mix des deux.
Donc dans un cas:
On va créer un vecteur de h vecteurs sur l Ordi
std::vector<std::vector<Ordi> > tab(h, std::vector<Ordi>(l));
et dans l'autre cas:
On va créer un array de h arrays de l Ordi
std::array<std::array<Ordi, l>, h> tab;
ou avec une allocation sur le tas
std::array<std::array<Ordi, l>, h >& tab = *new std::array<std::array<Ordi, l>, h >;
 
On peut alors dans les deux cas accéder aux éléments comme tab[i][j] si necessaire.
 
Dans le cas de std::array, il faut que le compilo ait le flag pour être en mode C++11 (-std=c++11 avec g++) et que h et l soient const.
 
A+,


Message édité par gilou le 13-01-2013 à 15:18:21

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed