直接上代码
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
// 从文件中获取数据
void readFile(char** buffer, int* size, const char* filename)
{
//ifstream in(filename, ios::binary);
ifstream in(filename);
if (!in)
{
// 失败
*buffer = NULL;
*size = 0;
}
else
{
in.seekg(0, ifstream::end); // 设置文件指针到末尾
*size = static_cast<int>(in.tellg()); // 读取文件长度
in.seekg(0, ifstream::beg); // 设置文件指针到开头
*buffer = new char[*size]; // 申请内存
in.read(*buffer, *size); // 读取文件内容
}
}
// 二维数组类,采用模板类方式
template<class T> class Array2D
{
public:
Array2D() : m_pArray(NULL) {
}
~Array2D()
{
if (m_pArray)
{
delete[] m_pArray;
m_pArray = NULL;
}
}
public:
void setSize(int sizex, int sizey)
{
m_nSizeX = sizex;
m_nSizeY = sizey;
m_pArray = new T[sizex * sizey];
}
T& operator()(int indexX,int indexY)
{
return m_pArray[indexY * m_nSizeX + indexX];
}
const T& operator()(int indexX, int indexY) const
{
return m_pArray[indexY * m_nSizeX + indexX];
}
private:
T* m_pArray;
int m_nSizeX;
int m_nSizeY;
};
// 状态类
class State
{
public: