二位数组的指针实现方式
#include <iostream>
#include <cmath>
template < class T >
void make2dArray ( T* * & arr, int RowSize, int ColumnSize)
{
arr = new T * [ RowSize] ;
for ( int i = 0 ; i < RowSize; i++ )
arr[ i] = new T[ ColumnSize] ;
}
template < class T >
void delete2dArray ( T* * & arr, int RowSize)
{
for ( int i = 0 ; i < RowSize; i++ )
delete [ ] arr[ i] ;
delete [ ] arr;
}
template < class T >
void make2dArray ( T* * & arr, int numberOfRows, T* Rowsize)
{
arr = new T * [ numberOfRows] ;
for ( int i = 0 ; i < numberOfRows; i++ )
arr[ i] = new T[ Rowsize[ i] ] ;
}
template < class T >
T* changeLength1D ( T* & arr, int OldLength, int NewLength)
{
T* temp = new T[ NewLength] ;
int minLength = std:: min ( OldLength, NewLength) ;
for ( int i = 0 ; i < minLength; i++ )
{
temp[ i] = arr[ i] ;
}
delete [ ] arr;
return temp;
}
template < class T >
T* * changeLength2D ( T* * & arr, int OldRowSize, int NewRowSize, int OldColumnSize, int NewColumnSize)
{
T* * temp;
try
{
make2dArray ( temp, NewRowSize, NewColumnSize) ;
}
catch ( std:: bad_alloc e)
{
std:: cout << "Allocate space failed!" << std:: endl;
exit ( 1 ) ;
}
int minRowSize = std:: min ( OldRowSize, NewRowSize) ;
int minColumnSize = std:: min ( OldColumnSize, NewColumnSize) ;
for ( int i = 0 ; i < minRowSize; i++ )
for ( int j = 0 ; j < minColumnSize; j++ )
temp[ i] [ j] = arr[ i] [ j] ;
delete2dArray ( arr, OldRowSize) ;
return temp;
}