http://simplesamples.info/simplesamples.info/MFC/Collections/CArray.html
CArray
아래는 CArray를 사용하는 간단한 예제로 이중 배열로 선언한 예입니다.
이중 배열로 선언해 사용하기 위해선 typedef를 먼저 만들어야 합니다.
typedef CArray <double, double>CArrayType;
다음엔 아래와 같이 CArrayType를 선언합니다.
CArrayType Doubles;
그리고, 항목을 추가합니다(D는 Double형 변수)
Doubles.Add (D);
다시, 반복문으로 채워봅니다.
int n = Doubles.GetSize();for (Index=0; Index<n; ++Index) {d = Doubles[Index]}
항목을 모두 지울 땐 아래처럼 합니다.
Doubles.RemoveAll;
내부 항목들은 포인터로 선언되지 않기에 깨끗하게 내부를 비워낼 수 있습니다.
CArray of CArray : 기본
CArray의 CArray를 생성하는 기본적인 코드는 아래와 같습니다.
class CDoublesArray : public CArray<double, double> {public:void operator= (const CDoublesArray& DoublesArray) {RemoveAll();Append(DoublesArray);}};
생성한 뒤, 사용하는 예는 아래와 같습니다.
CArray<CDoublesArray, CDoublesArray&> ArrayArray;CDoublesArray DoublesArray;DoublesArray.Add(9);DoublesArray.Add(99);ArrayArray.Add(DoublesArray);
CArray of CArray : 복합
클래스나 구조체의 CArray of CArray를 생성하기 위해선 복사 생성자가 필요합니다.
그래서, 아래처럼 하나의 클래스를 먼저 생성합니다.
class CBase {public:int BasePoly;};
CBase 클래스를 기반으로 클래스의 CArray를 생성할 수 있습니다.
class CBaseArray : public CArray<CBase, CBase&> {public:CBaseArray() : CArray<CBase, CBase&>() {};CBaseArray(const CBaseArray &BaseArray) {RemoveAll();Append(BaseArray);}void operator= (const CBaseArray &BaseArray) {RemoveAll();Append(BaseArray);}};
아래의 코드는 CArray 클래스와 CArrayBase 클래스를 응용한 2중 배열 사용의 예입니다.
int i1, i2;CBase Base;CBaseArray BaseArray;CArray<CBaseArray, CBaseArray&> BaseArrayArray;Base.BasePoly = 99;BaseArray.Add(Base);Base.BasePoly = 98;BaseArray.Add(Base);Base.BasePoly = 59;BaseArray.Add(Base);BaseArrayArray.Add(BaseArray);BaseArray.RemoveAll();Base.BasePoly = 9;BaseArray.Add(Base);Base.BasePoly = 8;BaseArray.Add(Base);Base.BasePoly = 5;BaseArray.Add(Base);BaseArrayArray.Add(BaseArray);for (i1=0; i1<BaseArrayArray.GetSize(); ++i1) {for (i2=0; i2<BaseArrayArray[i1].GetSize(); ++i2) {// Do something with BaseArrayArray[i1][i2]}}
다음검색