写了一个二维动态数组的函数模板,可以将它封成类使用。 ![](/Images/OutliningIndicators/None.gif)
#include <iostream>
#include <string>
![](/Images/OutliningIndicators/None.gif)
using namespace std;
![](/Images/OutliningIndicators/None.gif)
// 初始化动态数组
template<class T>
void Init2DArray(T** &p, int rows, int cols)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif) ![](/Images/OutliningIndicators/ContractedBlock.gif) {
for (int x=0; x<rows; ++x)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
for (int y=0; y<cols; ++y)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
p[x][y] = T();
}
}
}
![](/Images/OutliningIndicators/None.gif)
// 动态创建 2 维数组模板
template<class T>
void Create2DArray(T** &p, int rows, int cols)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif) ![](/Images/OutliningIndicators/ContractedBlock.gif) {
// 创建行指针
p = new T* [rows];
// 为每一行分配空间
for (int i=0; i<rows; ++i)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
p[i] = new T[cols];
}
// 初始化
Init2DArray(p, rows, cols);
}
![](/Images/OutliningIndicators/None.gif)
// 删除动态数组
template<class T>
void Delete2DArray(T** &p, int rows)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif) ![](/Images/OutliningIndicators/ContractedBlock.gif) {
// 释放每一行的空间
for (int i=0; i<rows; ++i)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
delete[] p[i];
}
// 删除指针
delete[] p;
p = 0;
}
![](/Images/OutliningIndicators/None.gif)
// 显示动态数组
template<class T>
void Show2DArray(T** &p, int rows, int cols, string arrayName = "p")
![](/Images/OutliningIndicators/ExpandedBlockStart.gif) ![](/Images/OutliningIndicators/ContractedBlock.gif) {
for (int x=0; x<rows; ++x)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
for (int y=0; y<cols; ++y)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
cout << arrayName << "[" << x << "][" << y << "] = " << p[x][y] << " ";
}
cout << endl;
}
}
![](/Images/OutliningIndicators/None.gif)
int main(void)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif) ![](/Images/OutliningIndicators/ContractedBlock.gif) {
// 测试模板函数
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);
![](/Images/OutliningIndicators/InBlock.gif)
Create2DArray(pChar, rows, cols);
Show2DArray(pChar, rows, cols, "pChar");
Delete2DArray(pChar, rows);
![](/Images/OutliningIndicators/InBlock.gif)
Create2DArray(pFloat, rows, cols);
Show2DArray(pFloat, rows, cols, "pFloat");
Delete2DArray(pFloat, rows);
![](/Images/OutliningIndicators/InBlock.gif)
system("pause");
return 0;
}
![](/Images/OutliningIndicators/None.gif)
|