如何在arx中动态分配二维数组????
我自己定义了一个坐标结构 比如 class point(double x,double y};point point_array;
但是系统一运行就出错,在vc里单独运行则没有问题,或者改成
point_array就没有问题,可能是刚开始分配内存过大引起的。
请问如果动态分配的话,如何实现 ??? point_array=new point *;
for (int i=0;i<100;i++) point _array=new point; 谢谢,能否说的具体些?
如果我不知道具体的数值(100),则如何构造。
能否实现CArray中用append()或add()函数添加元素? 用AcGePoint3dArray
AcGeDoubleArray
AcDbObjectArray
等 我说的是,能用point_array[=或 =point_array形式赋值吗??? 当然可以! 不好意思,能够完整的写一下吗、从类的定义到赋值 <TABLE height="100%">
<TBODY>
<TR>
<TD colSpan=2><FONT id=text1 style="FONT-SIZE: 10pt" face="宋体,verdana, arial, helvetica">模拟任意维数组的类 <BR>以下是一个可以模拟任意维数组的类.大小可以任意指定.<BR>缺点是创建起来比较麻烦,需要一个维对应的大小的数组.<BR><BR>基本能模拟取地址.operator [].任意维大小的分配.<BR><BR>以及智能的内存分配.(在内存里是连续的.只分配了一次内存.)<BR><BR><BR>#include "stdafx.h"<BR>#include <IOSTREAM><BR>#include <ASSERT.H><BR>using namespace std;<BR><BR>template <TYPENAME T,int Dim>class CArray<BR>{<BR>public:<BR>CArray()<BR>{<BR>m_pArrays = NULL;<BR>m_DimSize = 0;<BR>m_pData = NULL;<BR>}<BR><BR>CArray(int* DimSize,T* pMem = NULL)<BR>{<BR>m_pData = NULL;<BR>Create(DimSize,pMem);<BR>}<BR><BR>/*<BR>创建<BR>*/<BR>void Create(int* DimSize,T* pMem = NULL)<BR>{<BR>int size = 1;<BR>m_pData = NULL;<BR>//内存只有被创建一次<BR>if(pMem == NULL)<BR>{ <BR>for(int i = 0 ; i < Dim; i++)<BR>{<BR>size *= DimSize;<BR>}<BR>pMem = new T;<BR>m_pData = pMem;<BR>}<BR><BR>m_pArrays = new CArray<T,DIM-1>[*DimSize];<BR>m_DimSize = *DimSize ;<BR><BR>int d_Mem = size / m_DimSize ;<BR>for(int i = 0; i< m_DimSize ; i++)<BR>{<BR>m_pArrays.Create((DimSize + 1),pMem + d_Mem * i);<BR>}<BR><BR>}<BR><BR>T* operator &()<BR>{<BR>return &(m_pArrays);<BR>}<BR><BR>CArray<T,DIM-1>& operator[](int index)<BR>{<BR>assert(index < m_DimSize && index >= 0);<BR>return m_pArrays;<BR>}<BR><BR>void Free()<BR>{<BR>delete [] m_pArrays;<BR>m_pArrays = NULL;<BR>if(m_pData != NULL)<BR>{<BR>delete m_pData;<BR>m_pData = NULL;<BR>cout<<"T 类型内存被释放,该内存统一分配 "<<DIM<<ENDL;<BR /> }<BR>}<BR><BR>~CArray()<BR>{<BR>Free();<BR>}<BR><BR>protected:<BR>CArray<T,DIM-1>* m_pArrays;<BR>int m_DimSize ;<BR>T* m_pData;<BR><BR><BR>};<BR>template <TYPENAME T>class CArray<T,1><BR>{<BR>public:<BR>CArray()<BR>{<BR>m_Data = NULL;<BR>m_DimSize = 0;<BR>m_bNeedDelete = false;<BR>}<BR><BR>CArray(int* DimSize,T* pMem)<BR>{<BR>m_bNeedDelete = false;<BR>Create(DimSize,pMem);<BR>}<BR>void Create(int size,T* pMem)<BR>{<BR>if(pMem == NULL)<BR>{<BR>pMem = new T;<BR>m_bNeedDelete = true;<BR>}<BR>m_Data =pMem;<BR>m_DimSize = size;<BR>}<BR><BR>T* operator &()<BR>{<BR>return m_Data; <BR>}<BR>void Create(int* DimSize,T* pMem)<BR>{<BR>if(pMem == NULL)<BR>{<BR>pMem = new T];<BR>m_bNeedDelete = true;<BR>}<BR>m_Data = pMem;<BR>m_DimSize = DimSize;<BR>}<BR>T& operator[](int index)<BR>{<BR>assert(index < m_DimSize && index >= 0);<BR>return m_Data;<BR>}<BR>void Free()<BR>{<BR>if( m_bNeedDelete)<BR>{<BR>delete [] m_Data;<BR>m_Data = NULL;<BR>cout<<"T 类型内存被释放"<<ENDL;<BR /> }<BR>}<BR><BR>~CArray()<BR>{<BR>Free();<BR>}<BR><BR>public:<BR>T* m_Data;<BR>int m_DimSize ;<BR>bool m_bNeedDelete;<BR>};<BR><BR>int _tmain(int argc, _TCHAR* argv[])<BR>{<BR>int dimSize = {4,6,7,7};<BR>/*<BR>CArray 为 4 6 7 7的数组<BR>*/<BR>CArray<INT , 4> array;<BR>array.Create(dimSize);<BR>array = 1;<BR>int* pT = &(array);<BR>cout<<"pT : "<<PT<<ENDL;<BR /> <BR>int* pT2 = &array;<BR>*pT2 = 234;<BR>cout<<"array: "<<ARRAY<<ENDL;<BR /> cout<<"array: "<<ARRAY<<ENDL;<BR /> return 0;<BR>}</FONT> </TD></TR>
<TR>
<TD vAlign=bottom colSpan=2><BR><BR></TD></TR></TBODY></TABLE> 谢谢谢谢 能否告知老兄qq号,以后还请多执教 我的:qq 11170444
页:
[1]