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++ example DynamicArray<int> arrayOfInt; arrayOfInt.Length = 10; cout << "ArrayLength: " << arrayOfInt.Length << endl;
DynamicArray を解放するには、それに 0 の Length を割り当てます。
データへアクセスする
動的配列の要素にアクセスするには、[] 添字演算子を使用します:
//C++ example
void InitArray(DynamicArray<char> &c_array)
{
c_array[0] = 'A';
c_array[1] = 'B';
cout << "Third char is: " << c_array[2];
}
動的配列の境界
DynamicArrays のプロパティ Low と High は、それぞれ配列の最低境界と最高境界を返します。
//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;
}
メモ: Low プロパティは常に 0 を返します。High プロパティは Length-1 を返します。また、次の構文を使用して動的配列をたどることができます:
for (int i=0; i<arrayOfInt.Length; i++)
動的配列の代入、比較、コピー
動的配列は、参照がカウントされます。DynamicArray が他に割り当てられた場合、参照のみが割り当てられ(そして参照カウントが調整され)、ソースのコンテンツはコピーされません。同様に、2 つの動的配列が比較される際は、参照のみが比較され、そのコンテンツが比較されるわけではありません。DynamicArray のコンテンツをコピーするには、Copy(または 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.
}
多次元動的配列
動的配列は多次元にすることができます。多次元動的配列は必ずしも四角形でなければならないわけではありません。Length プロパティは、各次元を設定するために使用されます。次の例はこれを示しています。
//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);
}
}