Tableau dynamique a 2 dimensions

Signaler
Messages postés
32
Date d'inscription
vendredi 13 décembre 2002
Statut
Membre
Dernière intervention
31 décembre 2005
-
Messages postés
2
Date d'inscription
dimanche 18 décembre 2005
Statut
Membre
Dernière intervention
22 janvier 2006
-
Je cherche à créer un tableau dynamiquement au cours de mon application
(je ne connais pas ca taille avant d'éxecuter le programme).

Donc je sais que pour ca il existe la fonction new[] pour les tableau
mais le probleme c'est que de cette facon je n'arrive a creer des
tableau que de dimensions 1, du type : tab[100]



Pour mon application j'ai besoin d'avoir un tableau de dimension deux
creer de facon dynamique ( sa taille est determinée qu'une fois
l'application lancée)

Il me faudrait un tableau du type : tab[10][20] créer dynamiquement.

voila c'est tout. Merci d'avance. (oui le langage utilisé est le c++, mais bon je pense que vous l'aviez deviner)

6 réponses

Messages postés
475
Date d'inscription
dimanche 3 octobre 2004
Statut
Membre
Dernière intervention
11 août 2006
2
Pour les tableaux dynamiques en C++, utilise plutot std::vector.

Par exemple un tableau d'entier de deux dimensions:



vector< vector > tab;



Documentation:

http://www.sgi.com/tech/stl/Vector.html



Mais si tu veux une solution performante il faudra rester avec un
tableau à une seule dimension (physique) et t'arranger pour l'indexer
suivant 2 dimensions.

C'est pour quel genre d'utilisation ?
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
Faut créer un tableau de tableau. Par exemple, pour des entiers:



int ** tab = new *int[10]; (ou new int*[10] je sais plus)

for (int i = 0; i<10; i++)

{

tab[i] = new int[20];

}



Enfin, tu vois le genre de truc, il me semble que l'on peut pas faire autrement.



++
Messages postés
475
Date d'inscription
dimanche 3 octobre 2004
Statut
Membre
Dernière intervention
11 août 2006
2
C'est un tableau de pointeur (pas un tableau de tableau), et cette solution peut poser de gros problemes de performance.
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
tableau de tableau ou tableau de pointeur, c'est la meme chose, on pourrait meme dire pointeur de pointeur.



Tu peux détailler pour les problèmes de performance ? Je vois pas en
quoi ca induirait d'importantes baisses si ce n'est l'utilisation
massive de pointeur.

Est-ce que tu sais comment fonctionne vector ? Car vector < vector > ca parrait lourd aussi non ?
Messages postés
475
Date d'inscription
dimanche 3 octobre 2004
Statut
Membre
Dernière intervention
11 août 2006
2
Oui, vector < vector > c'est
lourd, c'est équivalent à la solution que tu proposes, cependant c'est
plus simple, plus sécurisé et plus performant sur les gros objets
(construction controlée).





int ** tab = new *int[10]; c'est un tableau de pointeur (tu alloues un pointeur de pointeur).



Pour allouer dynamiquement un vrai tableau à 2 dimensions il faut allouer un pointeur de tableau.

int (*tab)[20] = new int[n][20];

Le problème c'est que la seconde dimension doit etre connue à la compilation.



Pourquoi

int ** ou
vector
< vector > ne sont pas des solution performante ? Parce que les
donnée sont fragmentées en mémoire, suivant la taille des dimensions ca
peut etre plus ou moins mortelle pour les performances vu que ton cache
fera sans cesse des page fault.
Messages postés
2
Date d'inscription
dimanche 18 décembre 2005
Statut
Membre
Dernière intervention
22 janvier 2006

Bonjour!
Mon probléme c que j'ai un projet et pour le réaliser j'ai besoin d'un tableau de tres grande taille mon prof m'a conseillé d'utiliser un tableau de pointeurs à taille connue et dans chaque case de ce tableau y aura une allocation dynamique pour créer 1 autre tableau de pointeurs qui pointerons sur des chaines de caractéres, et quand j'ai essayer ça ne marche pas.
voila (d'une maiére simplifiée) ce que j'ai essayer de faire:
(ne faites pas attention a l'objectif du programme c que pour voir pq ça marches pas!)

#include <stdio.h>
#include <conio.h>
#include <string.h>
#include


main()
{
char *tab[256],nom[21],car='o';
int i=0,j=0;


tab[0]=(char*)malloc(sizeof(char)*256);
while(car=='o' || car=='O')
{


printf("\nSaisissez un non: ");
gets(nom);


tab[i][j]=(char)malloc(sizeof(char)*(sizeof(nom)+1));
strcpy(tab[i][j],nom);


j++;
if(j==256)
{
j=0;i++;
tab[i]=(char*)malloc(sizeof(char)*256);
}


if(i==255&&j==255)
{
printf("\nTableau plein\n");
break;
}


printf("Voulez vous continuer? (o/n) : ");
scanf("%c",&car);
}
getch();


}


et MERCI!