任意类型数组排序:模拟任意维动态数组的类
模拟任意维类
以下是个可以模拟任意维类.大小可以任意指定.
缺点是创建起来比较麻烦,需要个维对应大小. 我已经修改了好几次了BUG我没如何测试过.估计还有但是就是这个意思.
各位有兴趣把它修改好些.修改了如果有分享精神话.也让NHSoft知道下.
我Email [email protected]
基本能模拟取地址.operator .任意维大小分配.
以及智能内存分配.(在内存里是连续.只分配了次内存.)
# \"stdafx.h\"
# <iostream>
# <assert.h>
using std;
template <typename T, Dim> CArray
{
public:
CArray
{
m_pArrays = NULL;
m_DimSize = 0;
m_pData = NULL;
}
CArray(* DimSize,T* pMem = NULL)
{
m_pData = NULL;
Create(DimSize,pMem);
}
/*
创建
*/
void Create(* DimSize,T* pMem = NULL)
{
size = 1;
m_pData = NULL;
//内存只有被创建次
(pMem NULL)
{
for( i = 0 ; i < Dim; i)
{
size *= DimSize[i];
}
pMem = T[size];
m_pData = pMem;
}
m_pArrays = CArray<T,Dim-1>[*DimSize];
m_DimSize = *DimSize ;
d_Mem = size / m_DimSize ;
for( i = 0; i< m_DimSize ; i)
{
m_pArrays[i].Create((DimSize + 1),pMem + d_Mem * i);
}
}
T* operator &
{
&(m_pArrays[0]);
}
CArray<T,Dim-1>& operator( index)
{
assert(index < m_DimSize && index >= 0);
m_pArrays[index];
}
void Free
{
delete m_pArrays;
m_pArrays = NULL;
(m_pData != NULL)
{
delete m_pData;
m_pData = NULL;
cout<<\"T 类型内存被释放,该内存统分配 \"<<Dim<<endl;
}
}
~CArray
{
Free;
}
protected:
CArray<T,Dim-1>* m_pArrays;
m_DimSize ;
T* m_pData;
};
template <typename T> CArray<T,1>
{
public:
CArray
{
m_Data = NULL;
m_DimSize = 0;
m_bNeedDelete = false;
}
CArray(* DimSize,T* pMem)
{
m_bNeedDelete = false;
Create(DimSize,pMem);
}
void Create( size,T* pMem)
{
(pMem NULL)
{
pMem = T[size];
m_bNeedDelete = true;
}
m_Data =pMem;
m_DimSize = size;
}
T* operator &
{
m_Data;
}
void Create(* DimSize,T* pMem)
{
(pMem NULL)
{
pMem = T[DimSize[0]];
m_bNeedDelete = true;
}
m_Data = pMem;
m_DimSize = DimSize[0];
}
T& operator( index)
{
assert(index < m_DimSize && index >= 0);
m_Data[index];
}
void Free
{
( m_bNeedDelete)
{
delete m_Data;
m_Data = NULL;
cout<<\"T 类型内存被释放\"<<endl;
}
}
~CArray
{
Free;
}
public:
T* m_Data;
m_DimSize ;
bool m_bNeedDelete;
};
_t( argc, _TCHAR* argv)
{
dimSize[4] = {4,6,7,7};
/*
CArray 为 4 6 7 7
*/
CArray< , 4> .gif' />;
.gif' />.Create(dimSize);
.gif' />[2][1][3][1] = 1;
* pT = &(.gif' />[2][1][3]);
cout<<\"pT[0] : \"<<pT[1]<<endl;
* pT2 = &.gif' />[2][1];
*pT2 = 234;
cout<<\".gif' />[2][1][0][0]: \"<<.gif' />[2][1][0][0]<<endl;
cout<<\".gif' />[2][1][3][1]: \"<<.gif' />[2][1][3][1]<<endl;
0;
}
延伸阅读
最新评论