Anúncio
Anúncio

Mais conteúdo relacionado

Último(20)

Destaque(20)

Anúncio

Rust、何もわからない...#7 VecDeque再訪

  1. Rust、何もわからない... #7 VecDeque再訪
  2. 誰ですか? 株式会社ペイルド Chief Technology Officer @IgnorantCoder IgnorantCoder
  3. Rust 1.68.0 is now available ● Mar. 9にRust 1.68.0がリリースされました ○ estieさんが来週3/22に勝手にパーティをされるそうです ● Release Note ○ マクロがstableになったよ ○ で するとUpdate crete.io indexが早くなるよ ○ の がstableに、あと からの変換が O(1) 保証されたよ pin! registries.cretes-io protocol = 'sparse' VecDeque const fn new Vec
  4. Rust 1.68.0 is now available ● Mar. 9にRust 1.68.0がリリースされました ○ estieさんが来週3/22に勝手にパーティをされるそうです ● Release Note ○ マクロがstableになったよ ○ で するとUpdate crete.io indexが早くなるよ ○ の がstableに、あと からの変換が O(1) 保証されたよ pin! registries.cretes-io protocol = 'sparse' VecDeque const fn new Vec
  5. VecDequeってなんだっけ?
  6. RustにおけるSequencial collection Vec スタック上で、中身をヒープにおきたくて動的配列を使いたければ、これを使ってね。 VecDeque 最初とか最後に効率的に要素追加できる両端キューを使いたければ、これを使ってね。 LinkedList 絶対に本当にどうしても双方向連結リストじゃないとだめなときは、これを使ってね。 ※ ※ You are absolutely certain you really, truly, want a double linked list.
  7. RustにおけるSequencial collection ※ You are absolutely certain you really, truly, want a double linked list. Vec スタック上で、中身をヒープにおきたくて動的配列を使いたければ、これを使ってね。 VecDeque 最初とか最後に効率的に要素追加できる両端キューを使いたければ、これを使ってね。 LinkedList 絶対に本当にどうしても双方向連結リストじゃないとだめなときは、これを使ってね。 ※
  8. Vec の大まかな構造 *v *v+1 *v+2 *v+3 *v+4 … v *v+(len-1) *v+len … v.push … v.pop *v+(len-2) v.pop_front =remove(0) …
  9. Vec[i] ● 先頭ポインタ(&**self)から ● indexだけ進む https://github.com/rust-lang/rust/blob/e84e5ff04a647ce28540300244a26ba120642eea/library/alloc/src/vec/mod.rs#L2698-L2705 *v *v+1 *v+2 *v+3 *v+4 … *v+(len-1) *v+len *v+(len-2)
  10. Vec::push https://github.com/rust-lang/rust/blob/e84e5ff04a647ce28540300244a26ba120642eea/library/alloc/src/vec/mod.rs#L1836-L1847 … ● 先頭ポインタから ● lenだけ進んで ● 値を書き込み ● 長さを1伸ばす
  11. Vec::pop https://github.com/rust-lang/rust/blob/e84e5ff04a647ce28540300244a26ba120642eea/library/alloc/src/vec/mod.rs#L1836-L1847 ● 長さを1縮めて ● 先頭から長さ分先のポインタの値を返す …
  12. Vec の大まかな構造 *v *v+1 *v+2 *v+3 *v+4 … v *v+(len-1) *v+len … v.push … v.pop *v+(len-2) v.pop_front =remove(0) …
  13. Vec の大まかな構造 *v *v+1 *v+2 *v+3 *v+4 … v *v+(len-1) *v+len … v.push … v.pop *v+(len-2) v.pop_front =remove(0) … …
  14. Vec::remove https://github.com/rust-lang/rust/blob/e84e5ff04a647ce28540300244a26ba120642eea/library/alloc/src/vec/mod.rs#L1483-L1536 ● 対象のポインタまでアクセスして ● それ以降の要素をすべて一つ手前にシフト
  15. VecDeque の大まかな構造 head * v + l e n
  16. VecDeque::pop_front https://github.com/rust-lang/rust/blob/e84e5ff04a647ce28540300244a26ba120642eea/library/alloc/src/collections/vec_deque/mod.rs#L1566-L1592 head * v + l e n ● headを1つ次のポインタに移し替えて ● 長さを1減らして ● 元のheadの値を返す
  17. VecDeque::push_front https://github.com/rust-lang/rust/blob/e84e5ff04a647ce28540300244a26ba120642eea/library/alloc/src/collections/vec_deque/mod.rs#L1618-L1642 ● headを一個手前にずらして ● 長さを1伸ばし ● headに書き込む head * v + l e n
  18. Thank you for listening!!!
Anúncio