我正在使用C ++进行N体模拟,我使用粒子类数组收集了所有粒子。我需要分别处理粒子的子集合,也许是在一个新的数组中,但仍然希望同时保留完整的集合。
我已经有了一些代码,它接受一系列粒子并对它们起作用,所以理想情况下我只想让新的子数组指向相同的数据。是否有一种好的(整洁有效的)方法来定义一个子数组,指向与所有粒子的主数组相同的内存?
例如:
particle *full = new particle [10];
// define full here
particle *sub = // last 5 entries of full
func(full); // work on whole collection
func(sub); // work on sub collection
func(full); // work on whole collection with changes on sub[]
我发现this post关于处理子阵列的问题并不是我想做的事情。
任何建议都很棒,这是我的第一个大型项目。
答案 0 :(得分:0)
您可以将尺寸传递给您的方法,然后:
particle *full = new particle [10];
// define full here
particle *sub = full + (10 - 5);// last 5 entries of full
func(full, 10); // work on whole collection
func(sub, 5); // work on sub collection
func(full, 10); // work on whole collection with changes on sub[]
delete[] full;
答案 1 :(得分:0)
您可以尝试使用memcpy
void * memcpy ( void * destination, const void * source, size_t num );
将源arg作为full + 5,sizeof(particle)作为size_t num传递,将destination作为新指针传递。从那里他们应该是独立的。
编辑:
如果您只想引用数组而不是整个副本
,请使用@ Jarod42方法答案 2 :(得分:0)
在C ++中,我使用向量而不是数组(个人品味)。
所以
vector<particle> full;
//fill in `full`
vector<particle*> sub;
for(unsigned i=0;i<5;i++) if(full.size()>5-i) sub.push_back(&full[i]);
现在你有两个向量,sub的元素是指向完整元素的指针