从一个阵列到另一个阵列的选择性浅拷贝

new*_*ode 6 c++ arrays shallow-copy

假设我有2个不同大小的数组,即

int arr[] = {0,1,2,3,4,5,6,7,8,9};
int *arr2 = new int[5];
Run Code Online (Sandbox Code Playgroud)

我想浅层复制其中一些,Deep拷贝等效

int j =0;    
if(!(i%2))
    {
        arr2[j]=arr[i];
        j++;
    }
Run Code Online (Sandbox Code Playgroud)

现在,arr2的打印将输出:0,2,4,6,8

我想要浅拷贝的原因是因为我希望arr2更新为arr的任何更改.

那就是我在arr中循环和平方所有元素

我想要arr2输出:0,4,16,36,64

这两个数组是同一类的一部分,一个是我的多边形信息,另一个是数据驱动.arr实际上是4000多个元素,而arr2接近3000.目前我的算法在深度复制方面效果很好.但是因为我需要每个更新帧深度复制3000个元素,我浪费资源,并且想知道我是否可以通过浅拷贝以某种方式做到这一点,所以我不必每帧都更新arr2.我的代码需要它的工作方式,arr实际上有重复的arr2值.arr2是动画的点列表.然后将数据复制到arr,其中包含顶点的位置数据.这是因为arr包含多个bezier补丁,其中一些补丁与另一个补丁共享一条或多条边.但是我希望在动画时忽略表面上的中断.

重要的是,副本涉及索引

arr2[j]=arr[i];
Run Code Online (Sandbox Code Playgroud)

因为这就是我的代码设置方式.并且该操作是低负载的.

Kry*_*ton 6

你需要一个整数指针数组.

int *arr2[5];

for (int i = 0, j = 0; i < 10; i++) {
    if (!(i%2)) {
        arr2[j]= &arr[i];
        j++;
    }
}
Run Code Online (Sandbox Code Playgroud)

因此,您需要将arr2的每个元素设置为指向arr中的相应元素 arr2[j]= &arr[i];

当你需要访问arr2中的元素时,你会调用以下内容: int a = *arr2[j];

稍后再说让你将arr [0]更改为10 arr[0] = 10;然后int a = *arr2[0];会给你10.