System.DynamicArray
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);
}
}