写了一个二维动态数组的函数模板,可以将它封成类使用。 
#include <iostream>
#include <string>

using namespace std;

// 初始化动态数组
template<class T>
void Init2DArray(T** &p, int rows, int cols)
  {
for (int x=0; x<rows; ++x)
 {
for (int y=0; y<cols; ++y)
 {
p[x][y] = T();
}
}
}

// 动态创建 2 维数组模板
template<class T>
void Create2DArray(T** &p, int rows, int cols)
  {
// 创建行指针
p = new T* [rows];
// 为每一行分配空间
for (int i=0; i<rows; ++i)
 {
p[i] = new T[cols];
}
// 初始化
Init2DArray(p, rows, cols);
}

// 删除动态数组
template<class T>
void Delete2DArray(T** &p, int rows)
  {
// 释放每一行的空间
for (int i=0; i<rows; ++i)
 {
delete[] p[i];
}
// 删除指针
delete[] p;
p = 0;
}

// 显示动态数组
template<class T>
void Show2DArray(T** &p, int rows, int cols, string arrayName = "p")
  {
for (int x=0; x<rows; ++x)
 {
for (int y=0; y<cols; ++y)
 {
cout << arrayName << "[" << x << "][" << y << "] = " << p[x][y] << " ";
}
cout << endl;
}
}

int main(void)
  {
// 测试模板函数
int **pInt;
char **pChar;
float **pFloat;
int rows = 10;
int cols = 5;
Create2DArray(pInt, rows, cols);
pInt[2][3] = 6;
pInt[8][4] = 32;
Show2DArray(pInt, rows, cols, "pInt");
Delete2DArray(pInt, rows);

Create2DArray(pChar, rows, cols);
Show2DArray(pChar, rows, cols, "pChar");
Delete2DArray(pChar, rows);

Create2DArray(pFloat, rows, cols);
Show2DArray(pFloat, rows, cols, "pFloat");
Delete2DArray(pFloat, rows);

system("pause");
return 0;
}

|