?? matrix.h
字號:
#include <stdlib.h>
#include <malloc.h>
#ifndef __MatrixbyZsolt__
#define __MatrixbyZsolt__
///////////////////////////////////////////////////////////////////////////////////////
//Initialize a 2D matrix
///////////////////////////////////////////////////////////////////////////////////////
template<class Tipus> Tipus ** Init_Matrix_2D(int nx, int ny)
{
Tipus **X;
int i;
X=(Tipus **)calloc(nx,sizeof(Tipus *));
if (X==NULL)
{
return NULL;
}
int s = nx*ny;
Tipus* p = (Tipus*)calloc(s, sizeof(Tipus));
if (p == NULL)
{
free(X);
return NULL;
}
for (i=0; i<nx; i++)
{
X[i] = p;
p += ny;
}
return X;
};
///////////////////////////////////////////////////////////////////////////////////////
//Initialize a 2D matrix with different sizes in y
///////////////////////////////////////////////////////////////////////////////////////
template<class Tipus> Tipus ** Init_Matrix_2D(int nx, int *Size_y)
{
//the dimensions of Size_y must be [nx]
Tipus **X;
int i;
X=(Tipus **)calloc(nx,sizeof(Tipus *));
if (X==NULL)
{
return NULL;
}
int s = 0;;
for (i=0; i<nx; i++)
{
s += Size_y[i];
}
Tipus* p = (Tipus*)calloc(s, sizeof(Tipus));
if (p == NULL)
{
free(X);
return NULL;
}
for (i=0; i<nx; i++)
{
X[i] = p;
p += Size_y[i];
}
return X;
};
///////////////////////////////////////////////////////////////////////////////////////
//Clear a 2D matrix
///////////////////////////////////////////////////////////////////////////////////////
template<class Tipus> Tipus ** Free_Matrix_2D(Tipus **X)
{
if (!X)
return NULL;
free(X[0]);
free(X);
return NULL;
};
///////////////////////////////////////////////////////////////////////////////////////
//Initialize a 3D matrix
///////////////////////////////////////////////////////////////////////////////////////
template<class Tipus> Tipus *** Init_Matrix_3D(int nx, int ny, int nz)
{
Tipus ***X;
int i, j, ii, jj;
X=(Tipus ***)calloc(nx,sizeof(Tipus **));
if (X==NULL)
{
return NULL;
}
for (i=0; i<nx; i++)
{
X[i]=(Tipus **)calloc(ny,sizeof(Tipus *));
if (X[i]==NULL)
{
for (ii=0; ii<i; ii++)
{
free(X[ii]);
}
free(X);
return NULL;
}
}
int s = n_x*n_y*n_z;
Tipus* p = (Tipus*)calloc(s, sizeof(Tipus));
if (p == NULL)
{
for (i = 0; i< nx; i++)
{
free(X[i]);
}
free(X);
return NULL;
}
for (i=0; i<nx; i++)
{
for (j=0; j<ny; j++)
{
X[i][j] = p;
p += n_z;
}
}
return X;
};
///////////////////////////////////////////////////////////////////////////////////////
//Initialize a 3D matrix with different sizes in z
///////////////////////////////////////////////////////////////////////////////////////
template<class Tipus> Tipus *** Init_Matrix_3D(int nx, int ny, int ** Size_z)
{
//the dimensions of Size_z must be [nx][ny]
Tipus ***X;
X=(Tipus ***)calloc(nx,sizeof(Tipus **));
if (X==NULL)
{
return NULL;
}
for (int i=0; i<nx; i++)
{
X[i]=(Tipus **)calloc(ny,sizeof(Tipus *));
if (X[i]==NULL)
{
for (int ii=0; ii<i; ii++)
{
free(X[ii]);
}
free(X);
return NULL;
}
}
int s = 0;
for (i=0; i<nx; i++)
{
for (int j=0; j<ny; j++)
{
s += Size_z[i][j];
}
}
Tipus* p = (Tipus*)calloc(s, sizeof(Tipus));
if (p == NULL)
{
for (int i=0; i<nx; i++)
{
free(X[i]);
}
free(X);
return NULL;
}
for (i=0; i<nx; i++)
{
for (int j=0; j<ny; j++)
{
X[i][j] = p;
p += Size_z[i][j];
}
}
return X;
};
///////////////////////////////////////////////////////////////////////////////////////
//Clear a 3D matrix
///////////////////////////////////////////////////////////////////////////////////////
template<class Tipus> Tipus *** Free_Matrix_3D(Tipus ***X, int nx)
{
if (!X)
return NULL;
free(X[0][0]);
for (int i=0; i<nx; i++)
{
free(X[i]);
}
free(X);
return NULL;
};
#endif
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -