明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2060|回复: 8

如何在arx中动态分配二维数组????

[复制链接]
发表于 2004-6-30 09:59:00 | 显示全部楼层 |阅读模式
我自己定义了一个坐标结构 比如 class point(double x,double y};


point point_array[100][100];


但是系统一运行就出错,在vc里单独运行则没有问题,或者改成


point_array[20[20]就没有问题,可能是刚开始分配内存过大引起的。


请问如果动态分配的话,如何实现 ???
发表于 2004-7-2 10:26:00 | 显示全部楼层
point_array=new point *[100];


for (int i=0;i<100;i++) point _array=new point[100];
 楼主| 发表于 2004-7-2 18:02:00 | 显示全部楼层
谢谢,能否说的具体些?


如果我不知道具体的数值(100),则如何构造。


能否实现CArray中用append()或add()函数添加元素?
发表于 2004-7-2 21:38:00 | 显示全部楼层
用AcGePoint3dArray


AcGeDoubleArray


AcDbObjectArray


 楼主| 发表于 2004-7-3 09:19:00 | 显示全部楼层
我说的是,能用point_array[[j]=或         =point_array[j]形式赋值吗???
发表于 2004-7-3 10:38:00 | 显示全部楼层
当然可以!
 楼主| 发表于 2004-7-4 09:05:00 | 显示全部楼层
不好意思,能够完整的写一下吗、从类的定义到赋值
发表于 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;
}


 楼主| 发表于 2004-7-5 19:20:00 | 显示全部楼层
谢谢谢谢 能否告知老兄qq号,以后还请多执教 我的:qq 11170444
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-26 06:54 , Processed in 0.189028 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表