et array og lidt trylleri

Tags:    c++

Hvis jeg har et array som har size 10 og jeg gerne vil udvide den til, lad os sige 20. Hvordan gør jeg det? Jeg har selv regnet lidt ud og det må være en nemmere måde.
Altså noget med at oprette et nyt array som er 10*2 stor og fylde alt dataen over fra det gamle array til det nye array. Det er flytningen der forvolder mig stor skade da jeg er sikker på at der er en nemmere måde. Jeg kan desværre ikke vise jeg noget kode da jeg kun har lavet en lille skitse, men jeg må kunne komprimere den endelige kode.

Slot - All your base are belong to us
http://www.sigsys.dk



5 svar postet i denne tråd vises herunder
0 indlæg har modtaget i alt 0 karma
Sorter efter stemmer Sorter efter dato
Hvis jeg har et array som har size 10 og jeg gerne vil udvide den til, lad os sige 20. Hvordan gør jeg det? Jeg har selv regnet lidt ud og det må være en nemmere måde.
Altså noget med at oprette et nyt array som er 10*2 stor og fylde alt dataen over fra det gamle array til det nye array. Det er flytningen der forvolder mig stor skade da jeg er sikker på at der er en nemmere måde. Jeg kan desværre ikke vise jeg noget kode da jeg kun har lavet en lille skitse, men jeg må kunne komprimere den endelige kode.

Slot - All your base are belong to us
http://www.sigsys.dk


Tænkte om man kunne bruge memcpy til at kopierer et array til en ny?

Slot - All your base are belong to us
http://www.sigsys.dk



Man kan ikke ændre størrelsen på et array.

Man kan allokere et plads og bruge en pointer:

int *p = new int[10];

Hvis man så får brug for mere plads kan man:
int *s = new int [20];
std::copy(p, &p[10], s);
delete p;
p = s;

Man kan også vælge en std::vector, den kan gro som man ønsker, og opfører sig på mange måder som et array.

Man kan også bruge malloc/realloc/free



Man kan ikke ændre størrelsen på et array.

Man kan allokere et plads og bruge en pointer:

int *p = new int[10];

Hvis man så får brug for mere plads kan man:
int *s = new int [20];
std::copy(p, &p[10], s);
delete p;
p = s;

Man kan også vælge en std::vector, den kan gro som man ønsker, og opfører sig på mange måder som et array.

Man kan også bruge malloc/realloc/free


Hey bertel :)
Jeg har ellers lige kodet lidt og fundet memcpy. Gør copy det samme?
Altså jeg ville også lave et nyt array og gøre den dobbelt så stor som den første.

Fold kodeboks ind/udKode 


er hvad jeg lige fik fikset sammen.
Slot - All your base are belong to us
http://www.sigsys.dk



memcpy gør stort set det samme som std::copy, men argumenterne er nogle andre.

memcpy er ikke typesikker, så du kan ved et uheld komme til at kopiere en int * over i en double *

Husk at sidste argument til memcpy er bytes, så du skal bruge:

memcpy(b,a, sizeof(int)*maks);

a er kun maks stor, så du skal ikke *2, men du skal * sizeof(int)

For komplekse typer (class'er) er der en vigtig forskel; memcpy laver en byte for byte kopi, std::copy bruger de rigtige operatorer på class'en

Så hvis det er c++ bør du bruge std::copy, specielt hvis det er andet en POD.



memcpy gør stort set det samme som std::copy, men argumenterne er nogle andre.

memcpy er ikke typesikker, så du kan ved et uheld komme til at kopiere en int * over i en double *

Husk at sidste argument til memcpy er bytes, så du skal bruge:

memcpy(b,a, sizeof(int)*maks);

a er kun maks stor, så du skal ikke *2, men du skal * sizeof(int)

For komplekse typer (class'er) er der en vigtig forskel; memcpy laver en byte for byte kopi, std::copy bruger de rigtige operatorer på class'en

Så hvis det er c++ bør du bruge std::copy, specielt hvis det er andet en POD.


Haha havde sat og kæmpet med memcpy i noget tid pga. sizeof() :) copy er nok bedre at bruge så i mit tilfælde.

Slot - All your base are belong to us
http://www.sigsys.dk



t