🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

6 total messages Started by Witold Przygoda Fri, 31 Oct 1997 17:42
dynamiczne tablice wielowymiarowe
#199
Author: Witold Przygoda
Date: Fri, 31 Oct 1997 17:42
18 lines
992 bytes
Jeszcze jedno pytanko. Jak wlasciwie zadeklarowac zmienna, zeby
osiagnac potem:

owaZmienna = new int[n][5];

Gdyby bylo 1-wymiarowe to by bylo po prostu

int *owaZmienna;
owaZmienna = new int[n];

A jak w powyzszym? (jakos zaden sposob, jaki wyprobowalem, nie
dziala... a w ksiazkach ktore mam o dziwo tego nie pisza wprost).
Jak sie taki 2-wymiarowy twor kasuje? Zwyklym  delete []  owaZmienna;



Z gory dzieki, Witek P.
Re: dynamiczne tablice wielowymiarowe
#200
Author: Witold Przygoda
Date: Fri, 31 Oct 1997 19:41
22 lines
984 bytes
Dobra, na to pytanie juz sobie odpowiedzialem...

>owaZmienna = new int[n][5];
>
>Gdyby bylo 1-wymiarowe to by bylo po prostu
>
>int *owaZmienna;
>owaZmienna = new int[n];
>
>A jak w powyzszym?


To jakos tak...


int **owaZmienna;

owaZmienna = new (int*)[5];
for (int i=0; i<5; i++)  owaZmienna[i] = new int[n];

wp
Re: dynamiczne tablice wielowymiarowe
#201
Author: Arkadiusz Dabrowski
Date: Sat, 01 Nov 1997 16:00
38 lines
1554 bytes
On Fri, 31 Oct 1997 19:41:42 GMT, wp@cyberdude.com (Witold Przygoda) wrote:

>
>Dobra, na to pytanie juz sobie odpowiedzialem...
>
>>owaZmienna = new int[n][5];
>>
>>Gdyby bylo 1-wymiarowe to by bylo po prostu
>>
>>int *owaZmienna;
>>owaZmienna = new int[n];
>>
>>A jak w powyzszym?
>
>
>To jakos tak...
>
>
>int **owaZmienna;
>
>owaZmienna = new (int*)[5];
>for (int i=0; i<5; i++)  owaZmienna[i] = new int[n];

Zupelnie nie tak. Alokujesz 5 wskaznikow na inta, a nie tablice
wielowymiarowa.


Ma byc tak:

int (*a)[5];
a=new int[n][5];   // jak zamiast 5 napiszesz cos innego, to kompilator
                   // wglosi niezgodnosc typow (przynajmniej dobry kompilator tak zrobi)


    +--\ /--\ +--\ +--\ /--\ |  |             Arkadiusz Dabrowski
    |  | |  | |--< |--/ |  | |  |             dobrov@priv.onet.pl
    +--/ \--/ +--/ |  \ \--/  \/     stare konto:
                                     dobrov@zeus.polsl.gliwice.pl
Re: dynamiczne tablice wielowymiarowe
#202
Author: Witold Przygoda
Date: Sat, 01 Nov 1997 18:12
109 lines
3635 bytes
dobrov@friko.onet.pl (Arkadiusz Dabrowski) wrote:

>>int **owaZmienna;
>>
>>owaZmienna = new (int*)[5];
>>for (int i=0; i<5; i++)  owaZmienna[i] = new int[n];
>
>Zupelnie nie tak. Alokujesz 5 wskaznikow na inta, a nie tablice
>wielowymiarowa.
>
>
>Ma byc tak:
>
>int (*a)[5];
>a=new int[n][5];   // jak zamiast 5 napiszesz cos innego, to kompilator
>                   // wglosi niezgodnosc typow (przynajmniej dobry kompilator tak zrobi)


Moje rozwiazanie nie jest w sensie scislym tablica 2-wymiarowa, bo
najpierw mam niejako wskazniki do 5 rzedow, ktory potem kazdy z nich
dodaje n kolumn. W efekcie ma cos. czego potrzebowalem, a
potrzebowalem owaZmienna[n][5];   gdzie n - daje jako dana z zewnatrz.
Dziala.

Poza tym znalazlem na i-necie jeszcze pare innych rozwiazan, np.:

int **AllocateCont2dArray(int rows, int cols)
{
   int **m, *data;
   int i;

   m = new (int*)[rows]          // Array of pointers to the rows.
   data = new int[rows*cols]     // Allocate a contiguous section of
memory
                                 // for the whole matrix.
   for(i = 0; i < rows; i++)
     m[i] = &data[i*cols];       // `Connect' each row pointer to the
correct
                                 // location in the 1D array
   return(m);
}



albo (tu przytocze cala liste...........)


TITLE: Allocating multidimensional arrays


I have declared:
        double multiarray[][1000] ;
and now want to allocate storage.  What is the proper syntax for a
'new'
statement allocating space for a [16][1000] array?  The C++ faq
doesn't
seem to have anything on multidimensional arrays.

.............................................................................

Try this:

double **array = new double* [sizeof(double*) * rows];
array[0] = new double [sizeof(double) * rows * columns];
for (int i = 1; i < rows; i++)
        array[i] = array[0] + i * columns;

Where array is list of pointers to the beginning of each row.
Now you can just write array[i][j] to reference the elements.

.............................................................................


typedef double dmill[1000];
dmill *multiarray=new dmill[16];

.............................................................................


The final solution to my problem was:
double (*mutiDimArrayPtr)[1000];
.
.
.
mutiDimArrayPtr = new double[16][1000] ;

p.s.  I think some info on multidimensional arrays belongs in the FAQ.
This stuff is not simple!

.............................................................................


Never try something complicated when you can simplify it.
NEVER instantiate multidimeniosnal arrays.

USE A TYPEDEF.

typdef int i3[3];
typdef i3 i35[5];

i35*p=new i35[7];

No confusion here. There are 7 i35 objects, each is 5 i3 objects
each of which is an array of 3 integers.




Pozdrawiam i dzieki za odzew, wp
Re: dynamiczne tablice wielowymiarowe
#204
Author: Witold Przygoda
Date: Sat, 01 Nov 1997 19:45
13 lines
978 bytes
 wp@cyberdude.com (Witold Przygoda) wrote:

>dodaje n kolumn. W efekcie ma cos. czego potrzebowalem, a
>potrzebowalem owaZmienna[n][5];   gdzie n - daje jako dana z zewnatrz.
>Dziala.


Sorry: mialo byc -   owaZmienna[5][n];




wp
Re: dynamiczne tablice wielowymiarowe
#203
Author: Maciej Malycha
Date: Sat, 22 Nov 1997 00:00
19 lines
1070 bytes
Witold Przygoda <w...@cyberdude.com> napisal byl:
>  w...@cyberdude.com (Witold Przygoda) wrote:
> 
> >dodaje n kolumn. W efekcie ma cos. czego potrzebowalem, a
> >potrzebowalem owaZmienna[n][5];   gdzie n - daje jako dana z zewnatrz.
> >Dziala.
> 
> 
> Sorry: mialo byc -   owaZmienna[5][n];
> 
> wp

Nie prosciej zrobic sobie tablice jednowymiarowa i przeliczac indeksy?
Chyba, ze to dyskusja akademicka - to przepraszam.

-- 
Maciej
mm...@mat.uni.torun.pl (Maciej Malycha)
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads