» »

[C++] dinamično 2d polje

[C++] dinamično 2d polje

Compufreek ::

Lep pozdrav!
Mene pa samo zanima kako se deklarira dinamično 2d polje ?

moowy123 ::

int size = 5;

int array_matrix[size][size]; ?

Pimoz ::

xD tole pa res ni dinamično :P

bozjak ::

naredi dinamičen seznam, pri katerem je vsak element začetek novega dinamičnega seznama ...

če pa res misliš nekaj takega kot je predlagal moowy123, torej da dinamično pomeni zgolj to, da lahko nekje v programu določiš kako velika bo ta 2d tabela, potem pa uporabi new v kombinaciji z nečim takim:

    int dolzina = 50;
    int ** a = new int * [dolzina];
    
    for (int i = 0; i < dolzina; i++) {
        a[i] = new int [dolzina];
    }


LP Bozjak
http://upor.blogec.si
http://bozjak.deviantart.com

Iluvatar ::

Iz http://www.fredosaurus.com/notes-cpp/ne...

int* a = NULL; // Pointer to int, initialize to nothing.
int n; // Size needed for array
cin >> n; // Read in the size
a = new int[n]; // Allocate n ints and save ptr in a.

. . . // Use a as a normal array
delete [] a; // When done, free memory pointed to by a.
a = NULL; // Clear a to prevent using invalid memory reference.

Compufreek ::

naredi dinamičen seznam, pri katerem je vsak element začetek novega dinamičnega seznama ...

če pa res misliš nekaj takega kot je predlagal moowy123, torej da dinamično pomeni zgolj to, da lahko nekje v programu določiš kako velika bo ta 2d tabela, potem pa uporabi new v kombinaciji z nečim takim:

    int dolzina = 50;
    int ** a = new int * [dolzina];
    
    for (int i = 0; i < dolzina; i++) {
        a[i] = new int [dolzina];
    }


LP Bozjak



a to je potem tak da se naredi eno polje in nato v vsako polje tega polja shraniš novo polje ? če prav zastopim ?

moowy123 ::

@Pimoz ... kaj je nedinamičnega v moji deklaraciji tabele ?? :))

Compufreek ::

@Pimoz ... kaj je nedinamičnega v moji deklaraciji tabele ?? :))

dinamično pomeni da lahko premeniš velikost polja med izvajanjem programa za akr pa potrebuješ kazalec ti pa velikost določiš prej da se program izvede.

moowy123 ::

@Pimoz ... kaj je nedinamičnega v moji deklaraciji tabele ?? :))

dinamično pomeni da lahko premeniš velikost polja med izvajanjem programa za akr pa potrebuješ kazalec ti pa velikost določiš prej da se program izvede.



To je pa bolj ohlapna definicija dinamičnosti... Tukaj bi se lahko še razgovorili... Dinamično pomeni lahko tudi da imaš več instanc objekta v pomnilniku in ne samo ene statične... Iz tega vidika je moja rešitev lepo dinamična ( uporaba v classih in instancah razredov ).

Tutankhamun ::

moowy123, pač si falu. Priznaj napako pa bo :).
Dinamično polje pač pomeni, da se lahko spreminja v runtime, ti si pa naredu polje v compile time.
AMD Phenom QUAD 9950 Black Edition, 8GB

bozjak ::



...

a to je potem tak da se naredi eno polje in nato v vsako polje tega polja shraniš novo polje ? če prav zastopim ?


To naredi tabelo kazalcev dolzine "dolzina", nato pa za vsak kazalec naredimo se tabelo "dolzina" int-ov... Nato se uporablja tako kot navadno tabelo, npr a[13][27] = 5; (pod pogojem, seveda, da je dolzina vec od 27).

Seveda je potrebno tudi "popucati" za sabo, kot je ze nekdo omenil. Lp
http://upor.blogec.si
http://bozjak.deviantart.com

redo ::

V Numerical Recipes za C++ uporabljajo nekaj takega

int m=4,
    n=5;
int **mat = new int * [m];

mat[0] = new int[m*n];

for(int i = 1; i<m; i++)
  mat[i] = mat[i-1] + n;

...

delete[] mat[0];
delete[] mat;

Prednost pri tem je, da je matrika na enem mestu v spominu.

Keki ::

Mogoče najdeš kaj tukaj:
Klik

načeloma pa naj bi blo int (*polje)[velikost] = new int[velikost][velikost];
http://www.alfakan.si/
http://mihajerot.si/

Zgodovina sprememb…

  • spremenilo: Keki ()

Compufreek ::

bozjak-ova rešitev zelo lepo deluje edino kar mi ne uspe ugotoviti kako to pošlješ v funkcijo .....za 2d polje rabiš podatek o velikosti polja ....

bozjak ::

vsekakor deluje tudi rešitev, ki jo je podal redo (ubistvu ista stvar, le nekoliko težja za razumeti, dokler ni izpiljeno znanje pointerjev).

V funkcijo pošlji kar pointer (oz "dvojni pointer" ali "pointer na pinter"), ki si ga definiral, npr nekaj takega:

void izracunaj (int ** stevilo)
{
     stevilo[0][1] = 33;
     printf("%d", stevilo[0][1]);
}

int main(int argc, char *argv[])
{
    
    int dolzina = 50;
    int ** a = new int * [dolzina];
    
    for (int i = 0; i < dolzina; i++) {
        a[i] = new int [dolzina];
    }
    
    izracunaj(a);
    
    getch();
}


LP
http://upor.blogec.si
http://bozjak.deviantart.com

Zgodovina sprememb…

  • spremenil: bozjak ()


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[C++] Ali je mogoče?

Oddelek: Programiranje
161611 (1087) Ciklamen
»

[Vsi jeziki / C++] preprost logičen problem

Oddelek: Programiranje
61103 (1010) win64
»

c# težava delo z nizi

Oddelek: Programiranje
131512 (1363) Tutankhamun
»

[C++ naloga] seznam

Oddelek: Programiranje
81377 (1377) BigWhale
»

kazalci, funkcije ipd...

Oddelek: Programiranje
71301 (1232) OwcA

Več podobnih tem