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); } }