C 指针深副本
C++ Pointer Deep Copy
我正在尝试对整数数组的指针进行深层副本,并且在确定什么代码不必要地冗长且需要什么。
很难。我要复制的指针只是一个简单的整数数组。
int* vertexArray = new int[G->size()];
它包含数字0至size() - 1作为其值。我的第一个是制作一个新的int*,其中等于顶点阵列,
int* shortestTour = vertexArray
,但我相信,每当我输入Vertexarray时,这都会使最短的变化变化。是用这样的循环进行深层复制的唯一方法
for(int i=0; i<G->size(); i++){
shortestTour[i] = vertexArray[i];
}
,然后每次我找到比当前最短的旅行/路径时运行该循环?
编辑:这是用于旅行推销员问题的简单,蛮力实施。
正如您可能已经猜到的那样,深副本没有复制指针(毕竟,指针只是指向某些内存位置的地址),而是复制正在正在的内存由指针指向。
所以,如果您有
int* vertexArray = new int[G->size()];
深副本是
int* deepCopy = new int[G->size()];
for(size_t i = 0; i < G->size(); ++i)
deepCopy[i] = vertexArray[i]; // copy the allocated memory
当然,复制内存的更聪明,更快的方法,例如
std::memcpy(deepCopy, vertexArray, sizeof(int)*G->size()); // should be faster
浅副本只是复制指针,而不是内存,
int* shallowCopy = vertexArray;
shallowCopy
和vertexArray
指针都会反映您将进行的任何修改,因为现在两者都指向相同的内存块。
您应该考虑是否需要深层副本。如果您只想共享数据,则可能不会。如果数据必须是"本地",那么您可能会这样做。
相关文章:
- 将相同共享指针的副本存储在不同的向量中是否是一种好的做法?
- 指向基类的指针的 std::vector 的深层副本
- 如何让指针的深层副本将内部结构发送到内核?
- 带有随机指针的链表的深层副本
- 属于副本被推送到矢量的对象的指针会发生什么情况?
- 当我修改、更改和“删除”原始指针时,是否需要指针副本
- 我们如何在 C 中制作函数指针的深层副本
- 我如何创建一个双重指针的深层副本,涉及其他类(C )
- 在C++中制作此指针的本地副本
- 复制指针,在不更改原始指针的情况下更改副本指向的内容?
- 取消引用指针以创建数组的副本
- 移动语义是否只是一个浅层副本并将其他人的指针设置为 null?
- 如何使智能指针指向对象的副本
- 如果给出了该课程的指针,则深入应对以制作课程的副本
- C 指针深副本
- 对象或常量指针的副本
- C++:创建指针的副本
- 矢量和指针队列数据交换:深层和浅层副本
- 结构中的 CUDA 设备功能指针,没有静态指针或符号副本
- C++中的构造函数副本、列表、指针和模板