Comprehensive Rust(繁体中文). 242 47 融會貫通 - 練習 243 48 練習題的參考答案 244 XI 裸機開發:上午 245 49 歡迎瞭解 Rust 裸機開發 246 50 no_std 247 50.1 最簡單的 no_std 程式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248 50.2 alloc . . . 標準程式庫包含各式實用巨集。 • println!(format, ..) prints a line to standard output, applying formatting described in std::fmt. • format!(format, ..) 的運作方式與 println! 類似,但會以字串形式傳回結果。 • dbg!(expression) 會記錄並傳回運算式的值。 • todo 等於size_of::0 码力 | 358 页 | 1.41 MB | 10 月前3
Hello 算法 1.2.0 繁体中文 Rust 版。 在分析一段程式的空間複雜度時,我們通常統計暫存資料、堆疊幀空間和輸出資料三部分,如圖 2‑15 所示。 圖 2‑15 演算法使用的相關空間 相關程式碼如下: use std::rc::Rc; use std::cell::RefCell; /* 結構體 */ struct Node { val: i32, next: Option>>, } “指標”。 如以下程式碼所示,鏈結串列節點 ListNode 除了包含值,還需額外儲存一個引用(指標)。因此在相同資料 量下,鏈結串列比陣列佔用更多的記憶體空間。 use std::rc::Rc; use std::cell::RefCell; /* 鏈結串列節點類別 */ #[derive(Debug)] struct ListNode { val: i32, // 節點值 next: 同時包含指向後繼節點(下一個節點)和前驅節點(上一個節點)的引用(指標)。相較於單向鏈結串列, 雙向鏈結串列更具靈活性,可以朝兩個方向走訪鏈結串列,但相應地也需要佔用更多的記憶體空間。 use std::rc::Rc; use std::cell::RefCell; /* 雙向鏈結串列節點型別 */ #[derive(Debug)] struct ListNode { val: i32, // 節點值 0 码力 | 388 页 | 18.82 MB | 10 月前3
Hello 算法 1.2.0 繁体中文 C++ 版,並且這些數字的記憶體位址無須連續。 Q:C++ STL 裡面的 std::list 已經實現了雙向鏈結串列,但好像一些演算法書上不怎麼直接使用它,是不 是因為有什麼侷限性呢? 一方面,我們往往更青睞使用陣列實現演算法,而只在必要時才使用鏈結串列,主要有兩個原因。 ‧ 空間開銷:由於每個元素需要兩個額外的指標(一個用於前一個元素,一個用於後一個元素),所以 std::list 通常比 std::vector 更佔用空間。 ‧ 快取不友好:由於資料不是連續存放的,因此 std::list 對快取的利用率較低。一般情況下,std::vector 的效能會更好。 另一方面,必要使用鏈結串列的情況主要是二元樹和圖。堆疊和佇列往往會使用程式語言提供的 stack 和 queue ,而非鏈結串列。 Q:操作 res = [[0]] * n 生成了一個二維串列,其中每一個 [0] 都是獨立的嗎? 不是獨立的。此二維串列中,所有的 hash()(str); 第 6 章 雜湊表 www.hello‑algo.com 135 // 字串“Hello 演算法”的雜湊值為 15466937326284535026 // 在 C++ 中,內建 std:hash() 僅提供基本資料型別的雜湊值計算 // 陣列、物件的雜湊值計算需要自行實現 在許多程式語言中,只有不可變物件才可作為雜湊表的 key 。假如我們將串列(動態陣列)作為 key ,當串 0 码力 | 379 页 | 18.79 MB | 10 月前3
Hello 算法 1.2.0 繁体中文 C# 版,並且這些數字的記憶體位址無須連續。 Q:C++ STL 裡面的 std::list 已經實現了雙向鏈結串列,但好像一些演算法書上不怎麼直接使用它,是不 是因為有什麼侷限性呢? 一方面,我們往往更青睞使用陣列實現演算法,而只在必要時才使用鏈結串列,主要有兩個原因。 ‧ 空間開銷:由於每個元素需要兩個額外的指標(一個用於前一個元素,一個用於後一個元素),所以 std::list 通常比 std::vector 更佔用空間。 第 4 章 陣列與鏈結串列 www.hello‑algo.com 88 ‧ 快取不友好:由於資料不是連續存放的,因此 std::list 對快取的利用率較低。一般情況下,std::vector 的效能會更好。 另一方面,必要使用鏈結串列的情況主要是二元樹和圖。堆疊和佇列往往會使用程式語言提供的 stack 和 queue ,而非鏈結串列。 Q:操作 res = [[0]] * n 生成了一個二維串列,其中每一個0 码力 | 379 页 | 18.79 MB | 10 月前3
Hello 算法 1.2.0 繁体中文 Dart 版,並且這些數字的記憶體位址無須連續。 Q:C++ STL 裡面的 std::list 已經實現了雙向鏈結串列,但好像一些演算法書上不怎麼直接使用它,是不 是因為有什麼侷限性呢? 一方面,我們往往更青睞使用陣列實現演算法,而只在必要時才使用鏈結串列,主要有兩個原因。 ‧ 空間開銷:由於每個元素需要兩個額外的指標(一個用於前一個元素,一個用於後一個元素),所以 std::list 通常比 std::vector 更佔用空間。 第 4 章 陣列與鏈結串列 www.hello‑algo.com 88 ‧ 快取不友好:由於資料不是連續存放的,因此 std::list 對快取的利用率較低。一般情況下,std::vector 的效能會更好。 另一方面,必要使用鏈結串列的情況主要是二元樹和圖。堆疊和佇列往往會使用程式語言提供的 stack 和 queue ,而非鏈結串列。 Q:操作 res = [[0]] * n 生成了一個二維串列,其中每一個0 码力 | 378 页 | 18.77 MB | 10 月前3
Hello 算法 1.2.0 繁体中文 Go 版,並且這些數字的記憶體位址無須連續。 Q:C++ STL 裡面的 std::list 已經實現了雙向鏈結串列,但好像一些演算法書上不怎麼直接使用它,是不 是因為有什麼侷限性呢? 一方面,我們往往更青睞使用陣列實現演算法,而只在必要時才使用鏈結串列,主要有兩個原因。 ‧ 空間開銷:由於每個元素需要兩個額外的指標(一個用於前一個元素,一個用於後一個元素),所以 std::list 通常比 std::vector 更佔用空間。 ‧ 快取不友好:由於資料不是連續存放的,因此 std::list 對快取的利用率較低。一般情況下,std::vector 的效能會更好。 另一方面,必要使用鏈結串列的情況主要是二元樹和圖。堆疊和佇列往往會使用程式語言提供的 stack 和 queue ,而非鏈結串列。 Q:操作 res = [[0]] * n 生成了一個二維串列,其中每一個 [0] 都是獨立的嗎? 不是獨立的。此二維串列中,所有的0 码力 | 385 页 | 18.80 MB | 10 月前3
Hello 算法 1.2.0 繁体中文 Kotlin 版,並且這些數字的記憶體位址無須連續。 Q:C++ STL 裡面的 std::list 已經實現了雙向鏈結串列,但好像一些演算法書上不怎麼直接使用它,是不 是因為有什麼侷限性呢? 一方面,我們往往更青睞使用陣列實現演算法,而只在必要時才使用鏈結串列,主要有兩個原因。 ‧ 空間開銷:由於每個元素需要兩個額外的指標(一個用於前一個元素,一個用於後一個元素),所以 std::list 通常比 std::vector 更佔用空間。 ‧ 快取不友好:由於資料不是連續存放的,因此 std::list 對快取的利用率較低。一般情況下,std::vector 的效能會更好。 另一方面,必要使用鏈結串列的情況主要是二元樹和圖。堆疊和佇列往往會使用程式語言提供的 stack 和 queue ,而非鏈結串列。 Q:操作 res = [[0]] * n 生成了一個二維串列,其中每一個 [0] 都是獨立的嗎? 不是獨立的。此二維串列中,所有的0 码力 | 382 页 | 18.79 MB | 10 月前3
Hello 算法 1.2.0 繁体中文 Java 版,並且這些數字的記憶體位址無須連續。 Q:C++ STL 裡面的 std::list 已經實現了雙向鏈結串列,但好像一些演算法書上不怎麼直接使用它,是不 是因為有什麼侷限性呢? 一方面,我們往往更青睞使用陣列實現演算法,而只在必要時才使用鏈結串列,主要有兩個原因。 ‧ 空間開銷:由於每個元素需要兩個額外的指標(一個用於前一個元素,一個用於後一個元素),所以 std::list 通常比 std::vector 更佔用空間。 第 4 章 陣列與鏈結串列 www.hello‑algo.com 88 ‧ 快取不友好:由於資料不是連續存放的,因此 std::list 對快取的利用率較低。一般情況下,std::vector 的效能會更好。 另一方面,必要使用鏈結串列的情況主要是二元樹和圖。堆疊和佇列往往會使用程式語言提供的 stack 和 queue ,而非鏈結串列。 Q:操作 res = [[0]] * n 生成了一個二維串列,其中每一個0 码力 | 379 页 | 18.79 MB | 10 月前3
Hello 算法 1.2.0 繁体中文 JavaScript 版,並且這些數字的記憶體位址無須連續。 Q:C++ STL 裡面的 std::list 已經實現了雙向鏈結串列,但好像一些演算法書上不怎麼直接使用它,是不 是因為有什麼侷限性呢? 一方面,我們往往更青睞使用陣列實現演算法,而只在必要時才使用鏈結串列,主要有兩個原因。 ‧ 空間開銷:由於每個元素需要兩個額外的指標(一個用於前一個元素,一個用於後一個元素),所以 std::list 通常比 std::vector 更佔用空間。 ‧ ‧ 快取不友好:由於資料不是連續存放的,因此 std::list 對快取的利用率較低。一般情況下,std::vector 的效能會更好。 另一方面,必要使用鏈結串列的情況主要是二元樹和圖。堆疊和佇列往往會使用程式語言提供的 stack 和 queue ,而非鏈結串列。 Q:操作 res = [[0]] * n 生成了一個二維串列,其中每一個 [0] 都是獨立的嗎? 不是獨立的。此二維串列中,所有的0 码力 | 379 页 | 18.78 MB | 10 月前3
Hello 算法 1.2.0 繁体中文 TypeScript 版,並且這些數字的記憶體位址無須連續。 Q:C++ STL 裡面的 std::list 已經實現了雙向鏈結串列,但好像一些演算法書上不怎麼直接使用它,是不 是因為有什麼侷限性呢? 一方面,我們往往更青睞使用陣列實現演算法,而只在必要時才使用鏈結串列,主要有兩個原因。 ‧ 空間開銷:由於每個元素需要兩個額外的指標(一個用於前一個元素,一個用於後一個元素),所以 std::list 通常比 std::vector 更佔用空間。 ‧ ‧ 快取不友好:由於資料不是連續存放的,因此 std::list 對快取的利用率較低。一般情況下,std::vector 的效能會更好。 另一方面,必要使用鏈結串列的情況主要是二元樹和圖。堆疊和佇列往往會使用程式語言提供的 stack 和 queue ,而非鏈結串列。 Q:操作 res = [[0]] * n 生成了一個二維串列,其中每一個 [0] 都是獨立的嗎? 不是獨立的。此二維串列中,所有的0 码力 | 384 页 | 18.80 MB | 10 月前3
共 24 条
- 1
- 2
- 3













