Avatar billede mikkeljans Nybegynder
30. januar 2004 - 12:58 Der er 9 kommentarer og
2 løsninger

Dynamiske Arrays?

Er det muligt at lave Arrays hvor man når som helst kan ændre på hvor stor den skal være?
Avatar billede x-masman Nybegynder
30. januar 2004 - 13:32 #1
Det mener jeg ikke at der er. Så det må man vist selv kode. Det er dog ikke særlig svært.
Avatar billede x-masman Nybegynder
30. januar 2004 - 13:43 #2
Her er et dynamisk array for int. Hvis du ønsker strings skal det bare erstattes i de tilfælde.

#include "dyn_array.h"
#include <math.h>
#include <iostream>

dyn_array::dyn_array(double k){
  K = k;
  size = (int) K;
  E = new int[size];
  num = 0;
}

dyn_array::~dyn_array(){
  // nedlæg array
  delete[] E;
}

void dyn_array::expand(){
int* a = new int[(int)ceil(size * K)];
  for(int i = 0; i < num; i++){
    a[i] = E[i];
  }
  delete[] E; //Free whatever E points to
  E = a; //E points to array
  size = (int)ceil(K * size);
}

void dyn_array::contract(){
  int* a = new int[(int)ceil(size/K)];
  for(int i = 0; i < num; i++){
    a[i] = E[i];
  }
  delete[] E; //Free whatever E points to
  E = a; //E points to a
  size = (int)ceil(size/K);
}

void dyn_array::table_insert(int x){
  E[num] = x;
  num++;
  if (size == num) {
    expand();
  }
}

void dyn_array::table_delete(){
  num--;
  if (num < ((int)size/pow(K,2))) {
    contract();
  }
}

int& dyn_array::get_item(int i){
  return E[i-1];
}

int& dyn_array::operator[] (int i){
  return E[i-1];
}

int dyn_array::get_num(){
  return num;
}

int dyn_array::get_size(){
  return size;
}
Avatar billede mikkeljans Nybegynder
30. januar 2004 - 14:32 #3
Hvad betyder et * foran int og "new"?
Avatar billede x-masman Nybegynder
30. januar 2004 - 14:37 #4
at det er en pointer.
Avatar billede arne_v Ekspert
30. januar 2004 - 14:40 #5
Forskellige muligheder:

1)  new & delete + manuel kode

    (som i eksemplet ovenfor)

2)  STL data strukturer f.eks. vector

    som ikke har nogen fast størrelse men vokser efter behov

3)  Gå tilbage til C malloc og free fordi der er en realloc.
Avatar billede the_bma_man Nybegynder
30. januar 2004 - 16:08 #6
eller - lav ovenstående fra x-masman men som en template. På den måde vil din egenudviklede array-struktur kunne virke for alle datatyper.
Avatar billede mikkeljans Nybegynder
30. januar 2004 - 17:01 #7
Tror jeg mp læse noget om Pointeres... Hvad er en Template?

Og er der ikke andre der vil have points?
Avatar billede arne_v Ekspert
30. januar 2004 - 17:19 #8
En template er noget generisk kode som kan instantieres for en bestemt type.

D.v.s. at du kan bruge den samme type for int* og double*.
Avatar billede arne_v Ekspert
30. januar 2004 - 17:20 #9
Og jeg mener statdig at STL vector var værd at overveje.
Avatar billede arne_v Ekspert
30. januar 2004 - 17:20 #10
Jeg kan da godt ligge et svar.
Avatar billede the_bma_man Nybegynder
02. februar 2004 - 09:00 #11
Takker for points.
Jeg er helt enig med Arne i, at STL vector er et godt bud.
Men samtidig - hvis du vil have dit egenudviklede array - som x-man-man var inde på - mener jeg, at du bør lave det som en template.
En template er generisk kode, hvor man, hvis det bruges rigtigt, kan bruge alle standard datatyper - samt egenudviklede datatyper (klasser) bare de overholder kriterierne for de fundamentale typer.
Prøv at kigge i en bog - det er faktisk brugbart i mange sammenhænge.
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