Hello 算法 1.1.0 Rust版354 15.2 分数背包问题 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357 15.3 最大容量问题 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 361 15.4 最大切分乘积问题 . . 以动态地添加或删除元素,但它们的容量是固定的。如果数据量超出了预分配的大小,就需要创建一个新的 第 3 章 数据结构 hello‑algo.com 65 更大的数组,并将旧数组的内容复制到新数组中。 Q:在构建栈(队列)的时候,未指定它的大小,为什么它们是“静态数据结构”呢? 在高级编程语言中,我们无须人工指定栈(队列)的初始容量,这个工作由类内部自动完成。例如,Java 的 ArrayList 的初始容量通常为 nums[i] == target { return Some(i); } } None } 7. 扩容数组 在复杂的系统环境中,程序难以保证数组之后的内存空间是可用的,从而无法安全地扩展数组容量。因此在 大多数编程语言中,数组的长度是不可变的。 如果我们希望扩容数组,则需重新建立一个更大的数组,然后把原数组元素依次复制到新数组。这是一个 ?(?) 的操作,在数组很大的情况下非常耗时。代码如下所示:0 码力 | 388 页 | 18.50 MB | 1 年前3
 Hello 算法 1.2.0 简体中文 Rust 版353 15.2 分数背包问题 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 356 15.3 最大容量问题 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360 15.4 最大切分乘积问题 . . 结构可 以动态地添加或删除元素,但它们的容量是固定的。如果数据量超出了预分配的大小,就需要创建一个新的 第 3 章 数据结构 www.hello‑algo.com 65 更大的数组,并将旧数组的内容复制到新数组中。 Q:在构建栈(队列)的时候,未指定它的大小,为什么它们是“静态数据结构”呢? 在高级编程语言中,我们无须人工指定栈(队列)的初始容量,这个工作由类内部自动完成。例如,Java 的 ArrayList 的初始容量通常为 10。另外,扩容操作也是自动实现的。详见后续的“列表”章节。 Q:原码转补码的方法是“先取反后加 1”,那么补码转原码应该是逆运算“先减 1 后取反”,而补码转原码也 一样可以通过“先取反后加 1”得到,这是为什么呢? 这是因为原码和补码的相互转换实际上是计算“补数”的过程。我们先给出补数的定义:假设 ? + ? = ? , 那么我们称 ? 是0 码力 | 387 页 | 18.51 MB | 10 月前3
 Hello 算法 1.0.0 Rust版352 15.2 分数背包问题 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 356 15.3 最大容量问题 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359 15.4 最大切分乘积问题 . . 以动态地添加或删除元素,但它们的容量是固定的。如果数据量超出了预分配的大小,就需要创建一个新的 第 3 章 数据结构 hello‑algo.com 65 更大的数组,并将旧数组的内容复制到新数组中。 Q:在构建栈(队列)的时候,未指定它的大小,为什么它们是“静态数据结构”呢? 在高级编程语言中,我们无须人工指定栈(队列)的初始容量,这个工作由类内部自动完成。例如,Java 的 ArrayList 的初始容量通常为 nums[i] == target { return Some(i); } } None } 7. 扩容数组 在复杂的系统环境中,程序难以保证数组之后的内存空间是可用的,从而无法安全地扩展数组容量。因此在 大多数编程语言中,数组的长度是不可变的。 如果我们希望扩容数组,则需重新建立一个更大的数组,然后把原数组元素依次复制到新数组。这是一个 ?(?) 的操作,在数组很大的情况下非常耗时。代码如下所示:0 码力 | 383 页 | 17.61 MB | 1 年前3
 Hello 算法 1.2.0 繁体中文 Rust 版354 15.2 分數背包問題 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357 15.3 最大容量問題 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 361 15.4 最大切分乘積問題 . . 可以動態地新增或刪除元素,但它們的容量是固定的。如果資料量超出了預分配的大小,就需要建立一個新 的更大的陣列,並將舊陣列的內容複製到新陣列中。 Q:在構建堆疊(佇列)的時候,未指定它的大小,為什麼它們是“靜態資料結構”呢? 在高階程式語言中,我們無須人工指定堆疊(佇列)的初始容量,這個工作由類別內部自動完成。例如,Java 的 ArrayList 的初始容量通常為 10。另外,擴容操作也是自動實現的。詳見後續的“串列”章節。 nums[i] == target { return Some(i); } } None } 7. 擴容陣列 在複雜的系統環境中,程式難以保證陣列之後的記憶體空間是可用的,從而無法安全地擴展陣列容量。因此 在大多數程式語言中,陣列的長度是不可變的。 如果我們希望擴容陣列,則需重新建立一個更大的陣列,然後把原陣列元素依次複製到新陣列。這是一個 ?(?) 的操作,在陣列很大的情況下非常耗時。程式碼如下所示:0 码力 | 388 页 | 18.82 MB | 10 月前3
 Rust 程序设计语言 简体中文版 1.85.0向存放字符串内容内存的指针,一个长度,和一个容量。这一组数据存储在栈上。右侧则是堆 上存放内容的内存部分。 s1 name value ptr len 5 capacity 5 indexvalue 0 h 1 e 2 l 3 l 4 o 图 4-1:将值 "hello" 绑定给 s1 的 String 在内存中的表现形式 长度表示 String 的内容当前使用了多少字节的内存。容量是 String 从分配器总共获取了多少 从分配器总共获取了多少 字节的内存。长度与容量的区别是很重要的,不过在当前上下文中并不重要,所以现在可以忽 略容量。 当我们将 s1 赋值给 s2,String 的数据被复制了,这意味着我们从栈上拷贝了它的指针、长 度和容量。我们并没有复制指针指向的堆上数据。换句话说,内存中数据的表现如图 4-2 所 示。 72/562Rust 程序设计语言 简体中文版 s1 name value ptr indexvalue 0 h 1 e 2 l 3 l 4 o s2 name value ptr len 5 capacity 5 图 4-2:变量 s2 的内存表现,它有一份 s1 指针、长度和容量的拷贝 这个表现形式看起来并不像图 4-3 中的那样,如果 Rust 也拷贝了堆上的数据,那么内存看起 来就是这样的。如果 Rust 这么做了,那么操作 s2 = s1 在堆上数据比较大的时候会对运行时0 码力 | 562 页 | 3.23 MB | 1 月前3
 Comprehensive Rust(简体中文) 202412: : : `- - - - - - - - - - - - - -' `- - - - - - - - - - - - - - - -' • 指出 String 底层由 Vec 实现,因此它具有容量和长度,如果值可变,则可以通过在堆上重新分配 存储空间进行增长。 • 如果学员提出相关问题,你可以提及我们不仅能使用 [系统分配器] 在堆上分配底层内存,还能使用 Allocator API 实现自定义分配器0 码力 | 359 页 | 1.33 MB | 10 月前3
 Comprehensive Rust(繁体中文): : : : `- - - - - - - - - - - - - -' `- - - - - - - - - - - - - - - -' • 請說明 String 是由 Vec 支援,因此具有容量和長度,而且還能成長 (前提是可透過堆積上的重新 配置作業進行變動)。 • 如有學員問起,您可以說明基礎記憶體是使用 [系統配置器] 配置的堆積,而自訂配置器可以使用 [配置器 API] 實作。0 码力 | 358 页 | 1.41 MB | 10 月前3
 Comprehensive Rust(繁体中文) 202406: : : : `- - - - - - - - - - - - - -' `- - - - - - - - - - - - - - - -' • 請說明 String 是由 Vec 支援,因此具有容量和長度,而且還能成長 (前提是可透過堆積上的重新 配置作業進行變動)。 • 如有學員問起,您可以說明基礎記憶體是使用 [系統配置器] 配置的堆積,而自訂配置器可以使用 [配置器 API] 實作。0 码力 | 356 页 | 1.41 MB | 1 年前3
 Comprehensive Rust(日语) 202412: : : `- - - - - - - - - - - - - -' `- - - - - - - - - - - - - - - -' • String は Vec により実現されているため、容量と長さがあり、可変であればヒープ上の再割り 当てによって拡張できることを説明します。 • 受講者から尋ねられた場合は、システムアロケータを使用してメモリ領域がヒープから割り当 てられること、Allocator0 码力 | 381 页 | 1.36 MB | 10 月前3
共 9 条
- 1
 













