写了一个二维动态数组的函数模板,可以将它封成类使用。 #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; }
|