任意类型数组排序:模拟任意维动态数组的类

模拟任意维
以下是个可以模拟任意维类.大小可以任意指定.
缺点是创建起来比较麻烦,需要个维对应大小. 我已经修改了好几次了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;
}


Tags:  java动态数组 delphi动态数组 动态数组 任意类型数组排序

延伸阅读

最新评论

发表评论