【发布时间】:2020-12-30 21:47:11
【问题描述】:
我开始学习 Rust,这是我第一次使用一种你必须考虑内存分配的语言(我从未使用过 C)。
作为一个练习,我决定看看如何创建一个新向量,其中包含来自另一个向量的一些元素以及一些新元素。我的目标是创建一个向量来维护指向另一个向量中数据的指针,而不是复制或克隆该数据,以便仅为其他元素分配新内存。这是下面代码中发生的事情,和/或有更好的方法来做我想做的事情吗?
fn main() {
let v = vec![vec![1], vec![2], vec![3]];
let v0 = &v[0];
let v1 = &v[1];
let v2 = &vec![4];
let v3 = vec![v0, v1, v2];
}
我使用嵌套向量是因为对我来说,当您在堆上处理数据时,这个问题比在堆栈上更相关,并且当整数在堆栈上时,向量是在堆上分配的,但请记住我是整个领域的新手,如果我所说的和所做的完全没有意义,请随时告诉我????。
【问题讨论】:
-
是的,就是这样——
v3是三个向量引用的向量。问题是它没有你希望的那么有用,因为你已经共享了对所有这些向量的引用,你不再被允许修改它们。 -
谢谢,你关于突变的观点很好。来自功能背景,这有助于我通过翻译成我更熟悉的成语来理解内存分配的工作原理,但我知道成语的 Rust 更多地依赖于突变。无论如何,有没有更好或更惯用的方法来完成我的代码完成的同样事情?
-
这是问题的一部分:我不确定您要完成什么。我的意思是,从字面上看,这很清楚,我想这就是你的做法,但我不明白这有什么用,或者你想要完成什么。您的问题将通过提供一个用例或至少提供这样做的动机来解决。
-
这可以在 Rust 中完成,参见例如this crate,但这远非简单而且绝对不是一个学习项目。我什至建议你暂时忘记 clojure 风格的内存管理方法,并尝试学习 Rust 的做事方式。如果你只是想了解 Rust 中的借用检查器和内存操作,我建议this nice book。
-
看那本书,它看起来就像是为我写的!谢谢!
标签: rust