티스토리 뷰

목차

    반응형


    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

    반응형