System.DynamicArray

Aus Appmethod Libraries
Wechseln zu: Navigation, Suche

C++

template<class T> class RTL_DELPHIRETURN DynamicArray

Eigenschaften

Typ Sichtbarkeit Quelle Unit Übergeordnet
class public sysdyn.h System System

Beschreibung

DynamicArray ist die C++-Entsprechung des Object Pascal-Datentyps für dynamische Arrays.

Ein dynamisches Array ist eine als Array implementierte Kollektion, deren Größe dynamisch geändert werden kann. Die Template-Klasse DynamicArray ist eine C++-Implementierung der Object Pascal-Typen für dynamische Arrays. Die Template DynamicArray hat ein mit der Object Pascal-Implementierung dynamischer Arrays kompatibles binäres Layout.

template <class T> class DELPHIRETURN DynamicArray;

Sie müssen einen Template-Parameter angeben:

Parameter Bedeutung

type

Typ der Elemente

Länge dynamischer Arrays

Die Größe eines DynamicArray-Objekts kann mit der Eigenschaft Length abgerufen und festgelegt werden:

 //C++ Beispiel

DynamicArray<int> arrayOfInt;
arrayOfInt.Length = 10;
cout << "ArrayLength: " << arrayOfInt.Length << endl;

Um ein DynamicArray-Objekt freizugeben, weisen Sie ihm die Länge 0 zu.

Datenzugriff

Sie greifen über den Indizierungsoperator [] auf einzelne Elemente eines dynamischen Arrays zu:

//C++ Beispiel

void InitArray(DynamicArray<char> &c_array)
{
  c_array[0] = 'A';
  c_array[1] = 'B';
  cout << "Third char is: " << c_array[2];
}

Grenzen dynamischer Arrays

Die Eigenschaften Low und High von DynamicArray-Objekten geben die Ober- bzw. Untergrenze des Arrays zurück.

//C++ Beispiel

int TotalArray(const DynamicArray<int>& arrayOfInt)
{
  int total=0;
  for (int i=arrayOfInt.Low; i<=arrayOfInt.High; i++)
    total += arrayOfInt[i];
  return total;
}

Anmerkung:  Die Eigenschaft Low gibt stets 0 zurück. Die Eigenschaft High gibt Length-1 zurück. Dynamisches Arrays können wie folgt durchlaufen werden:

for (int i=0; i<arrayOfInt.Length; i++)

Dynamische Arrays zuweisen, vergleichen und kopieren

Dynamische Arrays unterliegen der Referenzzählung. Wenn ein DynamicArray-Objekt einem anderen zugewiesen wird, wird nur die Referenz zugewiesen (und der Referenzzähler angepasst); der Inhalt des Quell-Arrays wird nicht kopiert. Ebenso werden beim Vergleich zweier dynamischer Arrays nur die Referenzen verglichen, nicht die Inhalte. Zum Kopieren des Inhalts eines DynamicArray-Objekts müssen Sie die Methode Copy (oder CopyRange) verwenden.

//C++ Beispiel

void foo(DynamicArray<int> &i_array)
{
  DynamicArray<int> temp = i_array;
  assert(temp == i_array); // temp und i_array zeigen auf denselben Datenblock
                           // ..
  i_array[0] = 20;
  assert(temp[0] == 20); // Temp stellt Änderungen an i_array fest.
  temp = i_array.Copy(); // Temp ruft eine Kopie der Daten ab.
  temp[0] = 10;
  assert(temp[0] != i_array[0]); // Mit obiger Zuweisung wurde
                                 // i_array nicht geändert.
}

Mehrdimensionale dynamische Arrays

Dynamische Arrays können mehrdimensional sein. Mehrdimensionale dynamische Arrays müssen nicht rechteckig sein. Mit der Eigenschaft Length kann jede Dimension festgelegt werden. Sehen Sie sich dazu das folgende Beispiel an.

//C++ Beispiel

typedef DynamicArray< DynamicArray < AnsiString > > T2DStringArray;
void foo(T2DStringArray &s_array)
{
  SetLength(s_array, 10);
  for (int i=0; i<s_array.Length; i++)
  { // Länge der zweiten Dimensionen festlegen.(HINWEIS: nicht rechteckig)
    SetLength(s_array[i], i+1);
    for (int j=0; j<s_array[i].Length; j++)
      s_array[i][j] = itoa(i*10+j);
  }
}

Codebeispiele