Array-Grösse zur laufzeit verändern



  • hallo. das thema ist schon die frage. wie geht das? ne ListBox kann das ja auch irgendwie? 🙂



  • da gibts verschiedene varianten ...

    also ..

    1. du legst waerend der laufzeit einen array an und definierst dann wie gross er ist .. danach stopfst du deine daten rein
    das sieht dann so aus:

    int i=10, *array=new int[i];
    

    oder du legst eine variablen kette an.. in der jede variable einen pointer auf seinen nachvolger hat .. das hat den vorteil das man (auch wenn die kette schon mit daten vollgestopft ist) weitere elemente anhaengen kann
    das sieht dann so aus

    struct MyArray
    {
      int Value;
      MyArray *next;
    }
    
    main()
    {
      MyArray First;
    
      // 1 elemente hinzufuegen
    
        MyArray muh;
        muh.Value=10;
        First.next=muh;
    
      // nun kann man mit einer while schleife die kette durch gehen
        MyArray tmp=first;
        while(tmp)
        {
          printf("%i",tmp.Value) 
          tmp=tmp.Next;
        }
    }
    

    das 2. beispiel hab ich nicht getest .. es kann also sein das es nicht geht ..



  • Das Beispiel ist eher schlecht. Dieser Code funktioniert nur so lange die Objekte nicht freigegeben werden. Dies wiederum passiert, sobald die Objekte ihren Gültigkeitsbereich verlassen (z.B. Ende einer Funktion oder eines Blocks).

    Es gibt aber noch eine einfachere Lösung:

    du belegst ein Array (Zeiger auf ein Array) und merkst dir in einer Variablen, wie groß das Array ist (Anzahl Elemente). Wenn das Array voll ist und Du weitere Einträge brauchst, belegst Du einen neuen Zeiger auf größeres Array, kopierst den alten Schmutz aus dem alten Array in das neue und gibst das alte Array frei.

    Wenn sowas im Programm häufiger ist, erstellst Du eine Klasse dafür.

    Aber vielleicht gibt es auch schon eine fertige VCL-Klasse. Das weiß ich aber nich.... 🙄



  • Original erstellt von JFK:
    Aber vielleicht gibt es auch schon eine fertige VCL-Klasse. Das weiß ich aber nich....

    Es gibt diese und sie heißt DynamicArray

    ein Beispiel:

    DynamicArray<int> aArray;
    aArray.Length = 10;
    
    for (int i=0; i < aArray.Length; aArray[i] = i, i++ );
    

    [ Dieser Beitrag wurde am 04.07.2003 um 20:11 Uhr von bIce editiert. ]



  • wieder was gelernt... 😉



  • Steht alles in der FAQ ... 😉



  • std::vector<T> wäre aber auch ne variante die sogar portabel ist.



  • Wie gesagt, steht alles in der FAQ ... 😉


Anmelden zum Antworten