C ++两个带有一些重复数据的数组

时间:2015-01-15 08:36:42

标签: c++ arrays

我正在使用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关于处理子阵列的问题并不是我想做的事情。

任何建议都很棒,这是我的第一个大型项目。

3 个答案:

答案 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的元素是指向完整元素的指针