??? 寫了一個二維動態數組的函數模板,可以將它封成類使用。 
#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;
}

|