问题标签 [deep-copy]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - C++:在深拷贝中更新指针(有效)
我的问题最好用一个代码示例来说明,所以让我们开始吧:
现在我想做的是制作这个 Game 类的深拷贝。我创建了一个新向量,其中包含新的 shared_ptrs,它指向新的 Card 对象,它们是原始 Card 对象的副本。那部分很容易。
然后麻烦开始了,m_ptrs 的指针应该更新为指向 m_cards 中的卡片,这不是简单的任务。
我能想到的唯一方法是创建一个映射并在复制 m_cards(带有map[oldPtr] = newPtr
)期间填充它,然后使用它来更新 m_ptrs。但是,这只是O(m * log(n))
(m = m_ptrs.size(); n = m_cards.size()
)。因为这将是一个非常常规的操作*我想有效地做到这一点,我觉得O(m)
使用自定义指针应该是可能的。但是,我似乎无法找到一种有效的方法来做到这一点。有谁会吗?
*它用于为人工智能创建一个测试平台,让它“尝试”不同的动作
编辑:我想补充一点关于接受答案,因为我还没有。我一直在等我回到这个项目(因为我在这个项目上工作了太多,所以我走上了旁道——如果你这样做是为了好玩,那就必须保持乐趣),所以在我接受之前可能需要一段时间答案。不过,我会在一段时间内接受答案,所以不要担心:P
编辑 nr 2:我还没有回到这个项目。现在,我正在考虑只是采取O(m * log(n))
方式而不是抱怨,然后看看是否需要更快。然而,由于我最近花了一些时间来学习我的模式,我也认为我真的需要一些时间来重构这个项目。哦,我可能会花一些时间利用我掌握的所有新知识来解决这个问题。由于没有答案说“只需坚持使用哈希图,稍后再看看它是否真的需要更快”(如果有的话,我实际上会非常失望,因为这不是我问题的答案),我是推迟选择答案,直到我回到这个项目。
编辑 nr 3:我仍然没有回到这个项目。更准确地说,它已被无限期搁置。我很确定我现在不会让我的头太低O(m * log(n))
,然后如果结果证明是个问题,也许以后再看看。但是,这并不是我的问题的好答案,因为我明确要求更好的性能。不想让答案不再被接受,我选择了最有帮助的答案并接受了它。
c# - C# 使用 BinaryFormatter 深度复制树结构
编辑 1
肯特减轻了我的恐惧。但是,我发现该规则有一个例外。我为 Node 类编写了一个方法,该方法将向上遍历层次结构,直到到达根节点并返回其哈希码。除了一个对象之外,哈希码一直是相同的。总之,愤怒。
我正在编写我的第一个(相对)大型 C# 应用程序。但是,我想我发现了一个我搞砸的主要错误。
我的应用程序解析 XML 文件并创建对象层次结构,每个对象都继承自 Node 类,具有子列表和节点父引用。
我需要能够复制这个结构。概念是初始结构保存默认数据,您可以获取自己的副本并在使用时对其进行修改。所以我使用了一个通用的DeepClone< T >扩展方法来使用BinaryFormatter。
我的问题,虽然我觉得我已经知道(并且害怕)答案是什么,但这是否会给我留下重新分配所有父节点和子节点的引用的问题?
免责声明:当我完成这篇文章时,我意识到我犯的所有设计错误以及如何避免它们,包括这个。在我的辩护中,这个学期的大学将是我第一次参加数据结构课程。;) 我完全希望树的某些重要部分我未能实现,这将有助于解决这个问题。>_<
c# - 在 C# 中创建深拷贝
我想制作一个对象的深层副本,这样我就可以更改新副本,并且仍然可以选择取消我的更改并取回原始对象。
我的问题是该对象可以是任何类型,即使来自未知程序集。我不能使用BinaryFormatter
or XmlSerializer
,因为该对象不必要地具有 [Serializable] 属性。
我尝试使用以下Object.MemberwiseClone()
方法来做到这一点:
问题在于它不适用于可枚举(数组,列表等),不适用于字典。
那么,如何在 C# 中制作未知对象的深层副本?
TNX很多!
python - 深度复制(ing)从列表继承并覆盖附加的 TypedList 类的问题
我不明白为什么TypeList
类的新实例没有my_type
属性。
这是我的代码:
执行它会返回以下输出:
python - 派生的python对象的深拷贝
我在 python 中有一个对象,它派生自QtGui.QGraphicsPixmapItem
一些基本属性和方法。在调用deepcopy
对该对象的引用后,我收到一条错误消息,指出underlying C/C++ object has been deleted
当我尝试使用副本时。我之前收到过这个错误,它发生在我没有调用基类的构造函数时,__init__
所以我认为这个错误是因为QtGui.QGraphicsPixmapItem
没有被复制。
我该如何指定这个?我所知道的是有一种__deepcopy__
方法可以达到这个目的。
c++ - 如果不在纯虚拟基类中创建显式函数,就不能完成复制构造吗?
我的目标是做一个类的深拷贝,但是一个虚拟类却造成了麻烦。
编译错误信息:
我计划拥有更多从 Vir 继承的 Handler 类(如 Handler1、Handler2 等),并将拥有自己独特的成员(如 float a; 或 double b; 等)。因此,将所有 Handler 类的所有 getter 和 setter 函数保留在 Vir 类中对我来说是没有意义的。我想在 Handler 类中保留我的 getter 和 setter 方法,因为这些成员对于 Handler 类是唯一的。编译器不允许我这样做。帮助?
c++ - 矢量的深拷贝我的Arr
为了制作深拷贝myArr
,
哪里Point
是一个有 2 个整数作为成员的类,
我需要做一些特别的事情吗?或者可以
我需要删除一些点,otherArr
但同时我需要所有点以myArr
供以后使用。
提前致谢
java - 创建深拷贝方法,Java
我想做一个深拷贝方法。前几天我在这里寻求帮助解决这个问题,但那是针对复制构造函数的。现在我需要一个常规的方法。我创建了代码(非工作),但我只是不完全理解它。
现在当我创建一个名为jadeed的新GhostList,然后在其下创建一个新的ghost数据数组时,它是否知道数据属于jadeed GhostList?我看不出这两者是如何关联的,即使它们应该是关联的。
此外,我没有得到与副本和 this.object 相匹配的长度。我的问题是什么?
c++ - 如何(深度)从 const 对象复制地图
我还有一个我似乎无法解决的问题......,或者在这个网站上找到......
我有一个带有映射的对象(称为 DataObject),声明如下:
现在我有一个复制函数(在复制构造函数中使用):
这不会编译,因为 dataElements[i] 在 const 对象上是不可能的。如何对 const 对象拥有的地图中的所有元素进行深层复制?
我知道 find() 函数在 const 映射上是可能的,但是我怎样才能得到我想要复制的实际对象呢?