【发布时间】:2014-07-31 04:29:41
【问题描述】:
假设我有 2 个不同大小的数组,即
int arr[] = {0,1,2,3,4,5,6,7,8,9};
int *arr2 = new int[5];
我想浅拷贝其中一些, 深拷贝等价物是
int j =0;
if(!(i%2))
{
arr2[j]=arr[i];
j++;
}
现在打印 arr2 将输出:0, 2, 4, 6 ,8
我想要浅拷贝的原因是因为我希望 arr2 随着对 arr 的任何更改而更新。
如果我循环并平方 arr 中的所有元素
我希望 arr2 输出:0, 4, 16, 36 ,64
这2个数组属于同一个类,一个是我的多边形信息,另一个是数据驱动的。 arr 实际上是 4000+ 个元素的大小,而 arr2 接近 3000。目前我的算法适用于深拷贝。但是因为我需要在每个更新帧中深度复制 3000 个元素,所以我在浪费资源,并且想知道我是否可以通过浅拷贝以某种方式做到这一点,所以我不必每帧都更新 arr2。我的代码需要它工作的方式,arr 实际上有 arr2 的重复值。 arr2 是动画的点列表。然后将数据复制到保存顶点位置数据的 arr。这是因为 arr 包含多个贝塞尔补丁,其中一些与另一个补丁共享一个或多个边缘。但我希望在制作动画时忽略它,否则表面会出现中断。
重要的是副本涉及索引,如
arr2[j]=arr[i];
因为我的代码就是这样设置的。 并且操作是低负载的。
【问题讨论】:
-
对于 C++ 解决方案,您应该编写一个类似
std::array的类,其中有operator[],它可以正确地引用原始文件。有点像模型视图的东西。 -
你刚才说
arr2[j] = arr[i];是深拷贝,然后你说浅拷贝很重要arr2[j]=arr[i];。那没有意义。做int *arr2 = arr;有问题吗? -
@hyde 一个类只会在内部进行深层复制仍然会导致性能问题。
-
@MattMcNabb 是的。 arr 是一个比 arr2 更大的数组。所以如果我这样做 *arr2 = arr;我丢失数据。棘手的部分是 arr 按特定顺序包含来自 arr2 的重复数据。
-
@new2code 嗯,我的意思是一个不做任何复制的类,无论是深复制还是浅复制,而只是访问实际的数组。单向(只读)或双向,取决于要求。
标签: c++ arrays shallow-copy