Avatar billede telep Nybegynder
16. december 2003 - 15:15 Der er 14 kommentarer og
2 løsninger

Gøre et dynamisk array 1 større

Hejsa,

Jeg har et array af objekter af en klasse og nu skal der oprettes endnu et objekt og arrayet skal altså udviddes med 1.

Hvordan får jeg gjort arrayet 1 større?

Jeg har følgende i min constructor:

int arrSize = 0;
int brugte = 0;
a (som er en pointer) = new bog[arrSize];

nu skal jeg så have en funktion jeg kan kalde der udvidder arrayet!
Avatar billede repsak Nybegynder
16. december 2003 - 15:16 #1
du er nødt til at kopiere arrayet over i et nyt array, som er 1 større (du kan med fordel lave det 5 større så du ikke skal kopiere hver gang)
Avatar billede telep Nybegynder
16. december 2003 - 15:18 #2
kan du give mig koden?
Avatar billede repsak Nybegynder
16. december 2003 - 15:25 #3
jeg har desværre ikke koden, men dette er en skitse:
Klasse nytArray = new Klasse[antalSomEr1StørreEndGamleArray]
for(alle elementer i gammelt array){
  kopier: nytArray[i] = gammeltArray[i]
}
nytArray[sidstePlads} = ditObjekt;
pArray = nytArray;
Avatar billede arne_v Ekspert
16. december 2003 - 18:59 #4
bog *bigger = new bog[arrSize+1];
for(int i=0;i<arrSize;i++)
{
  bigger[i]=a[i];
}
arrSize++;

men overvej seriøst at bruge STL vector (eller list). De flinke folk
der har lavet din C++ compile rhar så lavet det hårde arbejde for dig.
Avatar billede telep Nybegynder
16. december 2003 - 19:42 #5
arne_v: kan du ikke forklare din kode lidt... jeg er ny i c++...
Avatar billede arne_v Ekspert
16. december 2003 - 20:18 #6
Teknisk set laver jeg et nyt array - man kunne så kopiere
den nye pointer over i den gamle (efter at have freet memory
med delete).

bog *bigger = new bog[arrSize+1]; // alloker et nyt array der er 1 større
for(int i=0;i<arrSize;i++)
{
  bigger[i]=a[i]; // kopier alt fra det gamle array til det nye array
}
arrSize++; // opdater størrelsen
// nu er vi klar til at bruge den nye tomme plads sidst i arrayet
Avatar billede arne_v Ekspert
16. december 2003 - 20:18 #7
STL vector (eller list) er meget nemmere.
Avatar billede arne_v Ekspert
16. december 2003 - 20:19 #8
Overvej også at skifte fra new/delete til malloc/free, fordi der er der
en realloc funktion !
Avatar billede telep Nybegynder
16. december 2003 - 20:37 #9
Men kan jeg stadig referere til arrayet med min pointer a?
Avatar billede arne_v Ekspert
16. december 2003 - 20:44 #10
Nej.

Så skal du først lave:

delete[] a;
a = bigger;
Avatar billede telep Nybegynder
16. december 2003 - 20:52 #11
så er det her at jeg skal overloade operator = og lave copy constructor ikke sandt?
Avatar billede arne_v Ekspert
16. december 2003 - 20:55 #12
bigger[i]=a[i];

virker bedst, hvis sådanne eksisterer !
Avatar billede telep Nybegynder
16. december 2003 - 21:09 #13
Det sidste du har skrevet forstår jeg ikke...
Avatar billede arne_v Ekspert
16. december 2003 - 21:10 #14
Når både bigger[i] og a[i] er bog objekter så er det en god ide at
have en = operator i bog klassen.
Avatar billede telep Nybegynder
19. december 2003 - 11:49 #15
svarer du også her arne_v?
Avatar billede arne_v Ekspert
26. december 2003 - 16:17 #16
OK
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester