System.DynamicArray

提供: RAD Studio API Documentation
移動先: 案内検索

C++

template<class T> class RTL_DELPHIRETURN DynamicArray

プロパティ

種類 可視性 ソース ユニット
class public sysdyn.h System System


説明

DynamicArray は、Delphi の動的配列型に相当する C++ の型です。

動的配列は、配列として実装されている可変長コレクションです。 DynamicArray テンプレートは、Delphi の動的配列型の C++ 実装です。 DynamicArray テンプレートは、Delphi の動的配列の実装と互換である、バイナリ レイアウトを使用します。

template <class T> class DELPHIRETURN DynamicArray;

次のテンプレート パラメータを 1 つ指定する必要があります。

パラメータ 使用方法

type

要素の型


動的配列の長さ

DynamicArray のサイズは、Length プロパティを介して設定および取得できます:

//C++ の例
DynamicArray<int> arrayOfInt;
arrayOfInt.Length = 10;
cout << "ArrayLength: " << arrayOfInt.Length << endl;

DynamicArray を解放するには、長さ 0 を割り当てます。

データへのアクセス

DynamicArray の要素にアクセスするには、添字演算子 [] を使用します。

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

動的配列の境界

DynamicArray の Low および High プロパティはそれぞれ、配列の下限値および上限値を返します。

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

メモ: Low プロパティは、常に 0 を返します。 High プロパティは、Length-1 の値を返します。 従って、次の構文で動的配列にアクセスすることもできます:

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

動的配列の代入、比較、およびコピー

動的配列は、参照でカウントされます。 DynamicArray が他へ代入された場合、参照が代入される(参照カウントが調整される)のみで、代入元の内容はコピーされません。 同様に、2 つの動的配列が比較される場合、参照のみが比較され、内容はされません。 DynamicArray の内容をコピーするには、Copy (または CopyRange)メソッドを使用する必要があります。

//C++ の例
void foo(DynamicArray<int> &i_array)
{
  DynamicArray<int> temp = i_array;
  assert(temp == i_array); // temp と i_array は同じデータの塊を指す。
  i_array[0] = 20;
  assert(temp[0] == 20); // temp で、i_array への変更が確認できる。
  temp = i_array.Copy(); // temp は、自分自身が所有するデータを持つ。
  temp[0] = 10;
  assert(temp[0] != i_array[0]); // 上記の代入で i_array は変更されない。
}


多次元動的配列

動的配列は、多次元にすることができます。 多次元動的配列は、四角形である必要はありません。 Length プロパティは、各次元を設定するために使用されます。 次の例でそれを示します:

//C++ の例
typedef DynamicArray< DynamicArray < AnsiString > > T2DStringArray;
void foo(T2DStringArray &s_array)
{
  SetLength(s_array, 10);
  for (int i=0; i<s_array.Length; i++)
  { // 2 番目の次元の長さを設定(注: 非四角形)SetLength(s_array[i], i+1);
    for (int j=0; j<s_array[i].Length; j++)
    s_array[i][j] = itoa(i*10+j);
  }
}

コード サンプル