問題タブ [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.

0 投票する
3 に答える
559 参照

c++ - C++: ディープ コピーのポインターを (効率的に) 更新する

私の質問はコードサンプルで最もよく説明されているので、それから始めましょう:

ここでやりたいことは、この Game クラスのディープ コピーを作成することです。元の Card オブジェクトのコピーである新しい Card オブジェクトを指す、新しい shared_ptrs を含む新しいベクトルを作成します。その部分は簡単です。

その後、問題が発生します。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)カスタムポインターを使用することでそれが可能になるはずだと感じています。しかし、これを行う効率的な方法を見つけることができないようです。する人はいますか?

* AI のテストベッドを作成するために使用され、さまざまな動きを「試す」ことができます


編集:まだ回答を受け入れていないので、回答を受け入れることについて少し追加したいと思います。私はこのプロジェクトに戻るまで待っています (私はこのプロジェクトにあまりにも多くの時間を割いていたので脇道に逸れました - あなたが楽しみのためにそれをするなら、それは楽しみであり続けなければなりません)、私が受け入れるまでにはもう少し時間がかかるかもしれません.答え。それにもかかわらず、私はいつか答えを受け入れるので、心配しないでください:P


編集番号 2: 私はまだこのプロジェクトに戻っていません。今のところ、O(m * log(n))文句を言うのではなく、ただ道をたどることを考えています。しかし、私は最近自分のパターンを学ぶのに時間がかかったので、このプロジェクトをしばらくリファクタリングする必要があると考えています. ああ、それと、私が持っているすべての新しい知識を使って、この問題に取り組むことに少し時間を費やすかもしれない. 「ハッシュマップに固執して、本当に高速化する必要があるかどうかを後で確認してください」という回答がないため(私の質問に対する回答ではないため、実際にあった場合はかなりがっかりします)、私はこのプロジェクトに戻るまで、回答の選択をもう少し延期します。


編集番号 3: 私はまだこのプロジェクトに戻っていません。より正確には、それは無期限に棚上げされました。今は頭を下げすぎず、O(m * log(n))後で問題が発生した場合は後で確認することはないと確信しています。ただし、パフォーマンスの向上を明示的に求めたので、それは私の質問に対する良い答えではありませんでした。回答をこれ以上受け入れないままにしたくないので、最も役立つ回答を選択して受け入れました。

0 投票する
1 に答える
537 参照

c# - BinaryFormatter を使用した C# ディープ コピー ツリー構造

編集1

ケントは私の恐れを和らげました。ただし、このルールには例外が 1 つあります。ルート Node に到達し、そのハッシュ コードを返すまで、階層を上に移動する Node クラスのメソッドを作成しました。ハッシュ コードは、1 つのオブジェクトを除いて、すべて同じです。一言で言えばRAGE。


初めての (比較的) 大規模な C# アプリケーションの作成が終わりました。しかし、私が失敗した重大なバグを発見したと思います。

私のアプリは XML ファイルを解析し、オブジェクトの階層を作成します。各オブジェクトは Node クラスから継承し、子のリストと親ノードの参照を使用します。

この構造をコピーできるようにする必要がありました。概念は、初期構造がデフォルト データを保持し、独自のコピーを取得して、それを使用しながら変更できるというものです。そこで、一般的なDeepClone< T >拡張メソッドを使用して、 BinaryFormatterでそれを行いました。

私の質問は、私はすでに答えを知っている(そして恐れている)と感じていますが、これにより、これらすべての親ノードと子ノードの参照を再割り当てするという問題が残りますか?


免責事項: これを書き終えると、私が犯したすべての設計ミスと、これを含め、どのように回避できたのかに気づきました。私の弁護では、大学での今学期は、データ構造のクラスを受講するのは初めてです。;) これを解決するのに役立つ、実装に失敗したツリーの重要な部分があることを完全に期待しています。>_<

0 投票する
9 に答える
9490 参照

c# - C# でディープ コピーを作成する

オブジェクトのディープ コピーを作成して、新しいコピーを変更し、変更をキャンセルして元のオブジェクトに戻すオプションが必要です。

ここでの問題は、オブジェクトが未知のアセンブリからであっても、任意の型になる可能性があることです。オブジェクトが不必要に [Serializable] 属性を持っているため、BinaryFormatterorを使用できません。XmlSerializer

メソッドを使用してこれを実行しようとしましたObject.MemberwiseClone()

これの問題は、列挙可能なもの (配列、リストなど) では機能せず、辞書では機能しないことです。

では、C# で不明なオブジェクトのディープ コピーを作成するにはどうすればよいでしょうか?

TNXたくさん!

0 投票する
1 に答える
769 参照

python - リストから継承し、追加をオーバーライドする TypedList クラスをディープコピーする際の問題

TypeListクラスの新しいインスタンスにmy_type属性がない理由がわかりません。

これが私のコードです:

実行すると、次の出力が返されます。

0 投票する
1 に答える
907 参照

python - 派生した Python オブジェクトのディープ コピー

QtGui.QGraphicsPixmapItemいくつかの基本的な属性とメソッドから派生した Python のオブジェクトがあります。deepcopyこのオブジェクトへの参照を呼び出した後underlying C/C++ object has been deleted、コピーを使用しようとするとエラーが発生します。以前にこのエラーを受け取ったことがありますが、基本クラスのコンストラクターを呼び出さなかったときに発生したため、このエラーはがコピーされていないこと__init__が原因であると想定しています。QtGui.QGraphicsPixmapItem

これを指定するにはどうすればよいですか?私が知っているのは、__deepcopy__この目的のための方法があるということだけです。

0 投票する
6 に答える
231 参照

c++ - 純粋仮想基底クラスで明示的な関数を作成せずにコピー構築を行うことはできませんか?

私の目的は、クラスのディープ コピーを作成することですが、仮想クラスが問題を引き起こしています。

コンパイル エラー メッセージ:

Vir から継承し、独自のメンバー (float a; や double b; など) を持つ Handler クラス (Handler1、Handler2 など) をさらにたくさん用意する予定です。したがって、すべての Handler クラスのすべての getter および setter 関数を Vir クラスに保持することは意味がありません。メンバーは Handler クラスに固有であるため、getter メソッドと setter メソッドを Handler クラスに保持したいと考えています。コンパイラは私にそうすることを許可していません。ヘルプ?

0 投票する
1 に答える
1093 参照

c++ - 仮想基本クラスで機能しないオブジェクトのクローンを作成する

実行時:

私の質問は、これこれ、およびこの投稿に関連しています。

最初のリンクで、 Space_C0wb0y は言う

「クローンメソッドはオブジェクトの実際のクラスのメソッドであるため、ディープコピーも作成できます。属するクラスのすべてのメンバーにアクセスできるため、問題はありません。」

ディープコピーがどのように発生するのかわかりません。上記のプログラムでは、浅いコピーすら行われていません。基本クラスが抽象クラスであっても機能する必要があります。ここでディープコピーを行うにはどうすればよいですか? 助けてください?

0 投票する
3 に答える
6882 参照

c++ - ベクトルのディープコピーmyArr

の深いコピーを作成するためにmyArr

Pointメンバーとして2つのintを持つクラスはどこにありますか

何か特別なことをする必要がありますか?または大丈夫です

いくつかのポイントを削除する必要がありますotherArrが、同時にmyArr、後で使用するためにすべてのポイントを削除する必要があります。

前もって感謝します

0 投票する
4 に答える
1330 参照

java - ディープ コピー メソッドの作成、Java

ディープコピーメソッドを作りたいです。先日、この問題についてここで助けを求めましたが、それはコピー コンストラクターに関するものでした。今、私は定期的な方法が必要です。コードを作成しましたが (動作していません)、完全には理解していません。

jadeed という名前の新しい GhostList を作成し、その下にゴーストの新しいデータ配列を作成すると、データが jadeed GhostList に属していることがわかりますか? 2つを関連付ける方法はわかりませんが、関連付ける必要があります。

また、コピーと this.object の長さが一致しません。私の問題は何ですか?

0 投票する
6 に答える
9241 参照

c++ - constオブジェクトからマップを(ディープ)コピーする方法

解決できないと思われる別の問題があります...またはこのサイトで見つけます...

次のように宣言されたマップを持つオブジェクト(DataObjectと呼ばれる)があります。

これで、コピー関数(コピーコンストラクターで使用)ができました。

constオブジェクトではdataElements[i]を使用できないため、これはコンパイルされません。constオブジェクトが所有するマップ内のすべての要素のディープコピーを作成するにはどうすればよいですか?

find()関数がconstマップで可能であることは知っていますが、コピーしたい実際のオブジェクトに到達するにはどうすればよいですか?