gpt4 book ai didi

C++ 指针深拷贝

转载 作者:行者123 更新时间:2023-12-02 08:34:34 25 4
gpt4 key购买 nike

我正在尝试制作指向整数数组的指针的深层拷贝,但无法确定哪些代码不必要地冗长以及需要什么。

我试图复制的指针只是一个简单的整数数组。

int* vertexArray = new int[G->size()];

它包含数字 0 到 size()-1 作为其值。我的第一个想法是创建一个新的 int* ,其中等于顶点数组,

int* shortestTour = vertexArray

但我相信,每次我排列 vertexArray 时,这都会使shortestTour 发生变化。是使用这样的循环进行深层复制的唯一方法

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;

您所做的任何修改都将由 shallowCopyvertexArray 指针反射(reflect),因为两者现在都指向同一内存块。

你应该考虑是否需要深拷贝。如果您只想共享数据,您可能不会这样做。如果数据必须是“本地”的,那么您可能会这么做。

关于C++ 指针深拷贝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30154501/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com