这两天怎么这么多关于二维数组的!!!!!!!难道都在做毕设?
自己写一个CMatrix不就全解决了?
自己写一个CMatrix不就全解决了?
解决方案 »
- GDI+&双缓冲,改变图片后Invalidate依然会闪烁。
- VC 添加WM_TIMER出错。
- 通过VC取EXCEL中的数字没问题,但如何取得EXCEL中的字符呢?
- 对同一个socket来说,完成端口可以同时提交多个操作请求吗,还是必须等上一个操作请求完成之后,再提交下一个请求?
- 流程控制是如何做出来的?
- 如何重新建立clw文件? 使ClassWizard显示类信息
- 请问下面报错怎么解决?
- WSOCK32.DLL里的buf的超难问题,请指教!~
- 我想要一个非常漂亮的Splash屏幕.哪位朋友可帮助我?
- OpenGL绘制光标与坐标轴
- 有关CBitmap的极弱问题,抢分了,大侠快出手,先到先得!还有,为什么我的给分上限只能到41呢?我想多加也不行,世道变了,惨呀
- 这个问题我在很多论坛上咨询过,至今没有满意答案,希望大侠多多关照,我很痛苦呀!!
// File Name:NxArray.hpp
//////////////////////////////////////#ifndef _NX_ARRAY_
#define _NX_ARRAY_#define DIM(d) (sizeof(d)/sizeof(int))template <class ARRAY_TYPE>
class TNxArray
{
public:
TNxArray(int nDimension,int *pDimension);
~TNxArray();
int GetSize();
const int *GetDimension(int &nDimension);
ARRAY_TYPE &operator()(int d0,...);
protected:
ARRAY_TYPE *m_pData;
int m_nSize;
int m_nDimension;
int *m_pDimension;};///////////////////////////////////////////////////////////////
// Impletation of template TNxArray
///////////////////////////////////////////////////////////////#include <stdarg.h>template <class ARRAY_TYPE>
TNxArray<ARRAY_TYPE>::TNxArray(int nDimension,int *pDimension)
{
m_nDimension=nDimension;
m_pDimension=new int[m_nDimension+1];
m_pDimension[m_nDimension]=1;
m_nSize=1;
for(int i=0;i<m_nDimension;i++)
{
m_pDimension[i]=pDimension[i];
m_nSize*=m_pDimension[i];
}
m_pData=new ARRAY_TYPE[m_nSize];
for(int i=0;i<m_nSize;i++)
m_pData[i]=0;
}template <class ARRAY_TYPE>
TNxArray<ARRAY_TYPE>::~TNxArray()
{
delete [] m_pDimension;
delete [] m_pData;
}template <class ARRAY_TYPE>
ARRAY_TYPE &TNxArray<ARRAY_TYPE>::operator()(int d0,...)
{
va_list ArrayFooter;
int nIndex=0,nSubIndex=1,i;
int *d=new int[m_nDimension];
d[0]=d0;
va_start(ArrayFooter,d0);
for(i=1;i<m_nDimension;i++)
d[i]=va_arg(ArrayFooter,int);
va_end(ArrayFooter);
for(i=m_nDimension-1;i>=0;i--)
{
nSubIndex*=m_pDimension[i+1];
nIndex+=d[i]*nSubIndex;
}
delete [] d;
return m_pData[nIndex];
}template <class ARRAY_TYPE>
int TNxArray<ARRAY_TYPE>::GetSize()
{
return m_nSize*sizeof(ARRAY_TYPE);
}template <class ARRAY_TYPE>
const int *GetDimension(int &nDimension)
{
nDimension=m_nDimension;
return m_pDimension;
}#endif//test.cpp//---------------------------------------------------------------------------#include <stdio.h>
#include "NxArray.hpp"//---------------------------------------------------------------------------int main(int argc, char* argv[])
{
int d1[]={2,5,4};
int d2[]={4,3};
int i,j,k;
TNxArray <int> A(DIM(d1),d1);
printf("\nTNxArray object instance A(%d Bytes):\n\n",A.GetSize ());
for(i=0;i<d1[0];i++)
for(j=0;j<d1[1];j++)
{
for(k=0;k<d1[2];k++)
{
A(i,j,k)-=(i+j-k);
printf(" A(%d,%d,%d)=%-3d",i,j,k,A(i,j,k));
}
printf("\n");
}
TNxArray <double> B(DIM(d2),d2);
printf("\nTNxArray object instance B(%d Bytes):\n\n",B.GetSize());
for(i=0;i<d2[0];i++)
{
for(j=0;j<d2[1];j++)
{
B(i,j)=(i+j-1.1)*1.7;
printf(" B(%d,%d)=%2.3f",i,j,B(i,j));
}
printf("\n");
}
return 0;
}
//---------------------------------------------------------------------------