System.DynamicArray
C++
template<class T> class RTL_DELPHIRETURN DynamicArray
Inhaltsverzeichnis
Eigenschaften
Typ | Sichtbarkeit | Quelle | Unit | Übergeordnet |
---|---|---|---|---|
class | public | sysdyn.h | System | System |
Beschreibung
DynamicArray ist die C++-Entsprechung des Delphi-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 Delphi-Typen für dynamische Arrays. Die Vorlage DynamicArray hat ein mit der Delphi-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; }
Hinweis: 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); } }