二维数组调整大小

来源:互联网 发布:时时动态数据展现工具 编辑:程序博客网 时间:2024/04/26 20:05

 #include<iostream>
using std::cin;
using std::cout;
using std::endl;

 

template<class T>
void Make2DArray(T **&x, size_t rows, size_t cols)
{
 x = new T* [rows];
 for (size_t i = 0; i != rows; ++i)
 {
  x[i] = new T[cols];
 }
}

template<class T>
void Delete2DArray(T **&x, size_t rows)
{
 for (size_t i = 0; i != rows; ++i)
 {
  delete [] x[i];
 }
 delete [] x;
 x = 0;
}


template<class T>
void ChangeSize2D(T **& arr, size_t SizeRow, size_t SizeCol,  size_t ToSizeRow, size_t ToSizeCol)
{
 if( SizeRow > ToSizeRow || SizeCol > ToSizeCol ) cout << "error : ToSize should great than size ";
 T **temp;
 Make2DArray(temp, ToSizeRow, ToSizeCol);
 for (size_t i = 0; i != SizeRow; ++i)
 {
  for (size_t j = 0; j != SizeCol; ++j)
  {
   temp[i][j] = arr[i][j];
  }
 }
 Delete2DArray(arr, SizeRow);
/*  arr = new T[ToSize];
    for ( i = 0; i != ToSize; ++i)
 {
     if(i < size)
   arr[i] = temp[i];
  else
   arr[i] = 0;
  cout << temp[i];
 }
 delete [] temp;*/
 arr = temp;
 return;
}


int main()
{
 const size_t SizeRow = 3;
 const size_t SizeCol = 4;
 const size_t ToSizeRow = 5;
 const size_t ToSizeCol = 6;

 

 int ** a ;
    Make2DArray(a, SizeRow, SizeCol);
 for (size_t i = 0; i != SizeRow; ++i)
 {
  for (size_t j = 0; j != SizeCol; ++j)
  {
   a[i][j] = i;
  }
 }
 for ( i = 0; i != SizeRow; ++i)
 {
  for (size_t j = 0; j != SizeCol; ++j)
  {
   cout << a[i][j] << endl;
  }
 }

 ChangeSize2D(a, SizeRow, SizeCol, ToSizeRow, ToSizeCol);
 for ( i = 0; i != ToSizeRow; ++i)
 {
  for (size_t j = 0; j != ToSizeCol; ++j)
  {
   cout << a[i][j] << endl;
  }
 }
 Delete2DArray(a, ToSizeRow);
 return 0;
}

原创粉丝点击