본문 바로가기
C++ 200제/코딩 IT 정보

MFC CArray 2차원 배열 예제 및 3가지 사용 방법

by vicddory 2017. 3. 7.


MFC CArray 사용법 2차원 배열[C++ MFC 배열 입력 출력 예제]


MFC CArray 사용법

아래는 CArray를 사용하는 간단한 예제로 2차원 배열로 선언한 예입니다. 이중 배열로 선언해 사용하기 위해선 typedef를 먼저 만들어야 합니다.


1
2
typedef CArray <doubledouble>
CArrayType;
cs


다음엔 아래와 같이 MFC CArrayType을 선언합니다.


1
CArrayType Doubles;
cs


그리고, 항목을 추가합니다. (D는 Double형 변수)


1
Doubles.Add (D);
cs


다시, 반복문으로 채워봅니다.


1
2
3
4
5
int n = Doubles.GetSize();
 
for (Index=0; Index<n; ++Index) {
    d = Doubles[Index]
}
cs


항목을 모두 지울 땐 아래처럼 합니다.


1
Doubles.RemoveAll;
cs


내부 항목들은 포인터로 선언되지 않기에 깨끗하게 내부를 비워낼 수 있습니다.

MFC CArray of CArray : 기본 사용법

CArray의 CArray를 생성하는 기본적인 코드는 아래와 같습니다.


1
2
3
4
5
6
7
8
class CDoublesArray : public CArray<doubledouble> {
 
public:
    void operator= (const CDoublesArray& DoublesArray) {
    RemoveAll();
    Append(DoublesArray);
    }
};
cs


생성한 뒤, 2차원 배열 사용하는 예는 아래와 같습니다.


1
2
3
4
5
6
7
CArray<CDoublesArray, CDoublesArray&> ArrayArray;
CDoublesArray DoublesArray;
 
DoublesArray.Add(9);
DoublesArray.Add(99);
 
ArrayArray.Add(DoublesArray);
cs


MFC CArray 사용법, 2차원 배열 예제 (CArray of CArray)[C++ MFC 배열 입력 출력 예제]


MFC CArray of CArray : 복합 사용법

클래스나 구조체의 CArray of CArray를 생성하기 위해선 복사 생성자가 필요합니다. 그래서, 아래처럼 하나의 클래스를 먼저 생성합니다.


1
2
3
4
5
class CBase {
 
public:
    int BasePoly;
};
cs


CBase 클래스를 기반으로 클래스의 CArray를 생성할 수 있습니다. 2차원 배열은 CArray of CArray로 표현합니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
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);    
        }
};
cs


아래의 코드는 MFC CArray 클래스와 CArrayBase 클래스를 응용한 2차원 배열 사용법니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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]
    }
}
cs


관련 글

CArray 배열 사용 방법

https://codingcoding.tistory.com/488


CByteArray 사용법

https://codingcoding.tistory.com/846


3가지 배열 예제 (CByteArray, CWordArray, CUnitArray)

https://codingcoding.tistory.com/489


동적 메모리 할당 이해하기

https://codingcoding.tistory.com/645

댓글