- 积分
- 433
- 明经币
- 个
- 注册时间
- 2004-5-25
- 在线时间
- 小时
- 威望
-
- 金钱
- 个
- 贡献
-
- 激情
-
|
发表于 2004-7-4 19:36:00
|
显示全部楼层
模拟任意维数组的类 以下是一个可以模拟任意维数组的类.大小可以任意指定. 缺点是创建起来比较麻烦,需要一个维对应的大小的数组.
基本能模拟取地址.operator [].任意维大小的分配.
以及智能的内存分配.(在内存里是连续的.只分配了一次内存.)
#include "stdafx.h" #include #include using namespace std;
template class CArray { public: CArray() { m_pArrays = NULL; m_DimSize = 0; m_pData = NULL; }
CArray(int* DimSize,T* pMem = NULL) { m_pData = NULL; Create(DimSize,pMem); }
/* 创建 */ void Create(int* DimSize,T* pMem = NULL) { int size = 1; m_pData = NULL; //内存只有被创建一次 if(pMem == NULL) { for(int i = 0 ; i < Dim; i++) { size *= DimSize; } pMem = new T[size]; m_pData = pMem; }
m_pArrays = new CArray[*DimSize]; m_DimSize = *DimSize ;
int d_Mem = size / m_DimSize ; for(int i = 0; i< m_DimSize ; i++) { m_pArrays.Create((DimSize + 1),pMem + d_Mem * i); }
}
T* operator &() { return &(m_pArrays[0]); }
CArray& operator[](int index) { assert(index < m_DimSize && index >= 0); return m_pArrays[index]; }
void Free() { delete [] m_pArrays; m_pArrays = NULL; if(m_pData != NULL) { delete m_pData; m_pData = NULL; cout<<"T 类型内存被释放,该内存统一分配 "< } }
~CArray() { Free(); }
protected: CArray* m_pArrays; int m_DimSize ; T* m_pData;
}; template class CArray { public: CArray() { m_Data = NULL; m_DimSize = 0; m_bNeedDelete = false; }
CArray(int* DimSize,T* pMem) { m_bNeedDelete = false; Create(DimSize,pMem); } void Create(int size,T* pMem) { if(pMem == NULL) { pMem = new T[size]; m_bNeedDelete = true; } m_Data =pMem; m_DimSize = size; }
T* operator &() { return m_Data; } void Create(int* DimSize,T* pMem) { if(pMem == NULL) { pMem = new T[DimSize[0]]; m_bNeedDelete = true; } m_Data = pMem; m_DimSize = DimSize[0]; } T& operator[](int index) { assert(index < m_DimSize && index >= 0); return m_Data[index]; } void Free() { if( m_bNeedDelete) { delete [] m_Data; m_Data = NULL; cout<<"T 类型内存被释放"< } }
~CArray() { Free(); }
public: T* m_Data; int m_DimSize ; bool m_bNeedDelete; };
int _tmain(int argc, _TCHAR* argv[]) { int dimSize[4] = {4,6,7,7}; /* CArray 为 4 6 7 7的数组 */ CArray array; array.Create(dimSize); array[2][1][3][1] = 1; int* pT = &(array[2][1][3]); cout<<"pT[0] : "< int* pT2 = &array[2][1]; *pT2 = 234; cout<<"array[2][1][0][0]: "< cout<<"array[2][1][3][1]: "< return 0; } |
| |
|