[Length of dynamic arrays]
+Length필드로 배열의 크기와, 메모리를 할당받는다.
DynamicArray<int> arrayOfInt;
arrayOfInt.Length = 10;
cout << "ArrayLength: " << arrayOfInt.Length << endl;
+메모리를 헤제하려면 Length를 0으로 설정한다.
[Accessing data]
+Dynamic Array에 값을 대입할 때는 배열을 순회할때 []연산자를 사용한다.
void InitArray(DynamicArray<char> &c_array)
{
c_array[0] = 'A';
c_array[1] = 'B';
cout << "Third char is: " << c_array[2];
}
[Bounds of dynamic arrays]
+Dynamic Array 의 Low와 High속성으로 첫번째와 마지막의 인덱스를 구할수있다.
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을 리턴한다. 그래서 일반적인 loop인 for를 다음과 같이 이용할수있다.
for (int i=0; i<arrayOfInt.Length; i++)
[Assigning, comparing and copying dynamic arrays]
Dynamic Arrays are reference counted.
When a DynamicArray is assigned to another, only the reference is assigned (and the reference count adjusted),
the content of the source is not copied.
Similarly, when two Dynamic Arrays are compared, only the references are compared, not the contents.
To copy the contents of a DynamicArray, you must use the Copy (or CopyRange) methods.
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.
}
[Multidimensional dynamic arrays]
Dynamic arrays can be multidimensional.
Multidimensional dynamic arrays don't have to be rectangular.
The Length property can be used to set each dimension.
The following example illustrates.
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);
}
}
#include <sysdyn.h>
#include <stdio.h>
#include "dynpas.hpp"
class someobject
{
public:
someobject()
{
printf("someobject::someobject() %p \n", this);
}
~someobject()
{
printf("someobject::~someobject() %p \n", this);
}
};
void dumpArrayOfString(const DynamicArray<AnsiString>& ds)
{
for (int i=0; i<ds.Length; i++)
printf("%s\n", ds[i].c_str());
}
void dump2DArrayOfString(const DynamicArray< DynamicArray<AnsiString> > & ds)
{
for (int i=0; i<ds.Length; i++)
{
for (int j=0; j<ds[i].Length; j++)
printf("%s ", ds[i][j].c_str());
printf("\n");
}
}
int main(void)
{
DynamicArray<AnsiString> oneD;
printf("Dimension: %d \n", oneD.DimCount());
fillArrayOfString(oneD);
dumpArrayOfString(oneD);
DynamicArray<DynamicArray<AnsiString> > twoD;
printf("Dimension: %d \n", twoD.DimCount());
fill2DArrayOfString(twoD);
dump2DArrayOfString(twoD);
return 0;
}
Software/C/C++