http://supercoding.tistory.com/3에 나와있는 내용을 초금 수정 한 버전..


#include "stdafx.h"
#include <windows.h>
#include <vector>

template <typename T>
class Array2D
{
public:
    Array2D(const unsigned int maxSizeX
, const unsigned int maxSizeY
, std::vector<T>& dataArray)
        : m_isInit(false)
        , m_dataArray(dataArray)
        , m_maxSizeX(maxSizeX)
        , m_maxSizeY(maxSizeY)
    {
        if (m_dataArray.size() == (m_maxSizeX * m_maxSizeY))
            m_isInit = true;
    }

    ~Array2D()
    {
        m_isInit = false;
    }

    // 제대로 세팅 되었는지 여부
    bool IsInit() { return m_isInit; }

    const int GetMaxSizeX() { return m_maxSizeX; }
    const int GetMaxSizeY() { return m_maxSizeY; }

    T& operator()(const unsigned int x, const unsigned int y)
    {
        return m_dataArray.at((y * m_maxSizeX) + x);
    }
    const T& operator()(const unsigned int x, const unsigned int y) const
    {
        return m_dataArray.at((y * m_maxSizeX) + x);
    }

private:
    bool m_isInit;

    const unsigned int m_maxSizeX;
    const unsigned int m_maxSizeY;

    std::vector<T>& m_dataArray;

};

int _tmain(int argc, _TCHAR* argv[])
{
    // 3*3 2차원 배열에 들어가는 개수 9개 세팅 (초기화)
    std::vector<BYTE> array;
    for (int i = 0; i < 9; i++)
        array.push_back(0);

    // 2차원 배열 사용...
    Array2D<BYTE> temp(3, 3, array);

    try
    {
        // 좌표 시작값은 0부터 시작
        temp(1, 1) = 1;
    }
    catch (std::exception e)
    {
        // 좌표가 오버 하면 에러 나오겠죠...
        printf("%s", e.what());
        return -1;
    }

    // 출력용
    for (int x = 0; x < temp.GetMaxSizeX(); x++)
    {
        for (int y = 0; y < temp.GetMaxSizeY(); y++)
        {
            printf("%d ", temp(x, y));
        }
        printf("\n");
    }

    return 0;
}



by 널부러 2018. 10. 19. 15:46
| 1 |