글
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;
}
RECENT COMMENT