System.DynamicArray
C++
template<class T> class RTL_DELPHIRETURN DynamicArray
Sommaire
Propriétés
Type | Visibilité | Source | Unité | Parent |
---|---|---|---|---|
class | public | sysdyn.h | System | System |
Description
DynamicArray est l'analogue C++ du type tableau dynamique Delphi.
Un tableau dynamique est une collection redimensionnable implémentée sous forme de tableau. Le modèle DynamicArray est l'implémentation C++ des types tableau dynamique de Delphi. Le modèle DynamicArray utilise une disposition binaire compatible avec l'implémentation tableau dynamique de Delphi.
template <class T> class DELPHIRETURN DynamicArray;
Vous devez spécifier un paramètre de modèle :
Paramètre | Utilisation |
---|---|
type |
le type des éléments |
Longueur des tableaux dynamiques
La taille d'un tableau DynamicArray peut être définie ou obtenue à partir de la propriété Length :
//Exemple C++ DynamicArray<int> arrayOfInt; arrayOfInt.Length = 10; cout << "ArrayLength: " << arrayOfInt.Length << endl;
Pour libérer un DynamicArray, affectez-lui zéro à sa propriété Length.
Accès aux données
Accès aux éléments d'un tableau dynamique via l'opérateur subscript [] :
//Exemple C++ void InitArray(DynamicArray<char> &c_array) { c_array[0] = 'A'; c_array[1] = 'B'; cout << "Third char is: " << c_array[2]; }
Limites des tableaux dynamiques
Les propriétés Low et High de DynamicArrays renvoient respectivement les limites inférieures et supérieures du tableau.
//Exemple C++ int TotalArray(const DynamicArray<int>& arrayOfInt) { int total=0; for (int i=arrayOfInt.Low; i<=arrayOfInt.High; i++) total += arrayOfInt[i]; return total; }
Remarque : La propriété Low renvoie toujours 0. La propriété High renvoie Length-1. Vous pouvez aussi traverser un tableau dynamique via la construction suivante :
for (int i=0; i<arrayOfInt.Length; i++)
Affectation, comparaison et copie de tableaux dynamiques
Les tableaux dynamiques sont des comptes de référence. Lorsqu'un objet DynamicArray est affecté à un autre, seule la référence est affectée (et le compte de référence est ajusté), le contenu de la source n'est pas copié. De même, lorsque deux tableaux dynamiques sont comparés, seules les références sont comparées, non le contenu. Pour copier le contenu d'un objet DynamicArray, vous devez utiliser la méthode Copy (ou CopyRange).
//Exemple C++ void foo(DynamicArray<int> &i_array) { DynamicArray<int> temp = i_array; assert(temp == i_array); // temp et i_array pointent vers le même bloc // de données. i_array[0] = 20; assert(temp[0] == 20); // Temp 'sees' est modifié en i_array. temp = i_array.Copy(); // Temp obtient sa propre copie de données. temp[0] = 10; assert(temp[0] != i_array[0]); // L'affectation précédente n'a pas // modifié i_array. }
Tableaux dynamiques multidimensionnels
Les tableaux dynamiques peuvent être multidimensionnels. Il n'est pas nécessaire que les tableaux dynamiques soient rectangulaires. La propriété Length peut être utilisée pour définir chaque dimension. L'exemple suivant en est une illustration.
//Exemple C++ typedef DynamicArray< DynamicArray < AnsiString > > T2DStringArray; void foo(T2DStringArray &s_array) { SetLength(s_array, 10); for (int i=0; i<s_array.Length; i++) { // Définissez les longueurs des dimensions secondaires.(REMARQUE : non-rectangulaires) SetLength(s_array[i], i+1); for (int j=0; j<s_array[i].Length; j++) s_array[i][j] = itoa(i*10+j); } }