System.DynamicArray

De RAD Studio API Documentation
Aller à : navigation, rechercher

C++

template<class T> class RTL_DELPHIRETURN DynamicArray

Propriétés

Type Visibilité  Source Unité  Parent
class public sysdyn.h System System


Description

DynamicArray est l'analogue C++ du type de tableau dynamiqueDelphi.

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 de 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 :

//C++ example

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

Pour libérer un DynamicArray, assignez la valeur 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 [] :

//C++ example

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.

//C++ example

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++)

Assignation, comparaison et copie de tableaux dynamiques

Les tableaux dynamiques sont des comptes de référence. Lorsqu'un objet DynamicArray est assigné à un autre, seule la référence est assignée (et le nombre de références 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).

//C++ example

void foo(DynamicArray<int> &i_array)
{
  DynamicArray<int> temp = i_array;
  assert(temp == i_array); // Temp and i_array point to same chunk
                           // of data.
  i_array[0] = 20;
  assert(temp[0] == 20); // Temp 'sees' changes to i_array.
  temp = i_array.Copy(); // Temp gets its own copy of data.
  temp[0] = 10;
  assert(temp[0] != i_array[0]); // Above assignment did not
                                 // modify 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.

//C++ example

typedef DynamicArray< DynamicArray < AnsiString > > T2DStringArray;
void foo(T2DStringArray &s_array)
{
  SetLength(s_array, 10);
  for (int i=0; i<s_array.Length; i++)
  { // Set lengths of second dimensions.(NOTE: non-rectangular)
    SetLength(s_array[i], i+1);
    for (int j=0; j<s_array[i].Length; j++)
      s_array[i][j] = itoa(i*10+j);
  }
}

Exemples de code