19. februar 2004 - 15:26
Der er
2 kommentarer og
1 løsning
Dynamisk allokering af multidimensionelt array
Jeg har det problem at jeg ikke umiddelbart kan hitte ud af hvordan jeg får allokeret et multidimensionelt array, dynamisk.
Mit gæt ville være:
int *raster;
raster = new int[10][10];
Men dette ser ikke ud til at virke.
Hvad gør jeg forkert?
19. februar 2004 - 15:32
#2
Det er faktisk et problem.
Følgende kode illusterer nogen af mulighederne:
#include <iostream>
using namespace std;
void init1(int *a,int n,int m)
{
for(int i=0; i<n; i++) for(int j=0; j<m; j++) a[i*m+j]=1;
return;
}
void show1(int *a,int n,int m)
{
for(int i=0; i<n; i++) {
for(int j=0; j<m; j++) cout << " " << a[i*m+j];
cout << endl;
}
return;
}
void init2(int **b,int n,int m)
{
for(int i=0; i<n; i++) for(int j=0; j<m; j++) b[i][j]=2;
return;
}
void show2(int **b,int n,int m)
{
for(int i=0; i<n; i++) {
for(int j=0; j<m; j++) cout << " " << b[i][j];
cout << endl;
}
return;
}
typedef int twodim[][3]; // <-------- fixed second dimension
void init3(twodim c,int n,int m)
{
for(int i=0; i<n; i++) for(int j=0; j<m; j++) c[i][j]=3;
return;
}
void show3(twodim c,int n,int m)
{
for(int i=0; i<n; i++) {
for(int j=0; j<m; j++) cout << " " << c[i][j];
cout << endl;
}
return;
}
int main()
{
int n = 2;
int m = 3;
int *a = new int[n*m];
init1(a,n,m);
show1(a,n,m);
int **b = new (int *)[n];
for(int i=0; i<n; i++) b[i]=new int[m];
init2(b,n,m);
show2(b,n,m);
twodim *c = new twodim[2];
init3(*c,n,m);
show3(*c,n,m);
}
1 = 1D array som simulerer 2D array
2 = array af array
3 = 2D array med en fixed dim