Rustアンチスレ (202レス)
Rustアンチスレ http://mevius.5ch.net/test/read.cgi/tech/1509028624/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
必死チェッカー(本家)
(べ)
自ID
レス栞
あぼーん
51: デフォルトの名無しさん [sage] 2020/08/28(金) 02:41:24.81 ID:BFWbiW8H Rustは、コンテナは、配列(長さがコンパイル段階で静的に決まる固定長)、 ベクター(動的配列)が主で、LinkedList<T>は、せっかくのリンクトリストの 特徴である末尾以外の「途中」への追加は出来ない。 これではリンクリストの意味が無い。 また、公式ドキュメントに 「ベクターの方がLinkedList<T>より速い」 などと書いてあるが、それはとんでもない間違い。 http://mevius.5ch.net/test/read.cgi/tech/1509028624/51
52: デフォルトの名無しさん [sage] 2020/08/28(金) 17:13:22.85 ID:BFWbiW8H リンクリストを実装するのはこんなに難しく、 nextメンバの型は、Option<Rc<RefCell<Node<T>>>> となる : type Link<T> = Rc<RefCell<Node<T>>>; #[derive(Debug)] struct Node<T> { value: T, prev: Option<Link<T>>, next: Option<Link<T>>, } impl<T> LinkedList<T> { pub fn append(&mut self, v: T) { let node = Node::new(v); match self.tail.take() { Some(old_tail) => { old_tail.borrow_mut().next = Some(Rc::clone(&node)); node.borrow_mut().prev = Some(old_tail); } None => { // first element debug_assert_eq!(self.len(), 0); self.head = Some(Rc::clone(&node)); } } self.tail = Some(node); self.length += 1; } } http://mevius.5ch.net/test/read.cgi/tech/1509028624/52
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.655s*