[過去ログ]
プログラミング言語 Rust 4 (1002レス)
プログラミング言語 Rust 4 http://mevius.5ch.net/test/read.cgi/tech/1507970294/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
リロード規制
です。10分ほどで解除するので、
他のブラウザ
へ避難してください。
75: デフォルトの名無しさん [sage] 2017/11/09(木) 01:32:36.02 ID:kYfp6pnU >>73 Option::takeを使って子ノードのsuccかpredの値を取ってくるとすると、その子ノードの値はNothingになるよね? wikipediaの例だとその後にdeleteを再帰的に行うことで(delete内で適宜skew&splitを呼んでる)バランスを保つよう処理してるけど、Nothingが入ってる時点でうまく動く保証が無い そのスレで書いてくれたものは要素としてCopyであるi32を使ってるから問題が見えないんじゃないかと思う >>74 自分も>>73の例を見る前に多相型でちょっと書いてみて、どうすんだこれって気付いたんで偉そうなこと言えないっす Rust固有の問題じゃないような気がしてるよ。C++とかで多相型にしてみたとしても、「子ノードの値を自身の値にする」って部分でコピーが行われる気がしてならない 一瞬だけどAA木の中に同じ値を持つノードが発生しているから、AA木の実装を綺麗に書こうとしたらT:Copy or T:Cloneって制約は必須なんじゃないかと http://mevius.5ch.net/test/read.cgi/tech/1507970294/75
76: デフォルトの名無しさん [] 2017/11/09(木) 03:38:46.05 ID:x23Vytiv >>75 ああ、なるほどね。 確かにi32の部分をTに置き換えると T: Copy か T: Clone が必須になるね。 これは確かに無駄なコピーが発生してるわ。 まぁ、この実装だとおそらく元になったwikipediaのコードの時点で 無駄なコピーが発生してることになるよね。 wikipediaの場合はi32(4byte)くらいならコピーしてもいいやってスタンスなのかな? Tの場合は何byteになるか分からないからそういうわけにもいかないということかな? これ以上は考えるのが面倒になってしまった。。。orz http://mevius.5ch.net/test/read.cgi/tech/1507970294/76
77: 70 [sage] 2017/11/09(木) 19:44:06.23 ID:1u6Rcsa8 https://ideone.com/dFoFa9 ・>>70の<T: Copy>を<T: Clone>に変更 ・ついでにRc付きで運用してみて様子を観察 でっかい構造体の場合はこういうふうなのがマシなのかな Clone運用してるとこに、さらにRcもってくると気持ちよすぎ おかげで内部の操作に由来した余計な割り当ては無くなった CloneトレイトとRcには敬意を表したい >>75 そこんとこの苦悩はもうしゃあないのかな それについてはもう思考停止します http://mevius.5ch.net/test/read.cgi/tech/1507970294/77
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.051s