Xer*_*nix 3 c++ pointers deep-copy
我试图制作一个指向整数数组的指针的深层副本,并且无法确定哪些代码不必要地冗长和需要什么.
我试图复制的指针只是一个简单的整数数组.
int* vertexArray = new int[G->size()];
Run Code Online (Sandbox Code Playgroud)
它包含数字0到size() - 1作为其值.我的第一个是创建一个新的int*等于顶点数组,
int* shortestTour = vertexArray
Run Code Online (Sandbox Code Playgroud)
但我相信每次我置换vertexArray时都会做出最短的改变.是使用这样的循环对此进行深度复制的唯一方法
for(int i=0; i<G->size(); i++){
shortestTour[i] = vertexArray[i];
}
Run Code Online (Sandbox Code Playgroud)
然后每当我发现一个比当前最短的旅程/路径短的时候运行该循环?
编辑:这是一个简单,蛮力实施旅行商问题.
正如您可能已经猜到的,深度复制不是复制指针(毕竟,指针只是指向某个内存位置的地址),而是复制指针指向的内存.
所以,如果你有
int* vertexArray = new int[G->size()];
Run Code Online (Sandbox Code Playgroud)
深刻的副本是
int* deepCopy = new int[G->size()];
for(size_t i = 0; i < G->size(); ++i)
deepCopy[i] = vertexArray[i]; // copy the allocated memory
Run Code Online (Sandbox Code Playgroud)
当然,有更聪明,更快速的方式来复制内存,比如
std::memcpy(deepCopy, vertexArray, sizeof(int)*G->size()); // should be faster
Run Code Online (Sandbox Code Playgroud)
浅拷贝只是复制指针而不是内存,
int* shallowCopy = vertexArray;
Run Code Online (Sandbox Code Playgroud)
你所做的任何修改都会被两个shallowCopy和两个vertexArray指针反映出来,因为它们现在指向相同的内存块.
您应该考虑是否需要深层复制.如果你只是想分享数据,你可能不会.如果数据必须是"本地的",那么你可能会这样做.