Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rust:使用最小的新内存分配创建包含现有向量元素的新向量_Rust - Fatal编程技术网

Rust:使用最小的新内存分配创建包含现有向量元素的新向量

Rust:使用最小的新内存分配创建包含现有向量元素的新向量,rust,Rust,我开始学习Rust,这是我第一次在一种需要考虑内存分配的语言中工作(我从未使用过C) 作为练习,我决定看看如何创建一个新的向量,除了一些新元素之外,还包括来自另一个向量的一些元素。我的目标是创建一个向量来维护指向另一个向量中数据的指针,而不是复制或克隆该数据,这样新的内存只分配给其他元素。这就是下面代码中发生的情况,和/或是否有更好的方法来完成我正在尝试的工作 fn main(){ 设v=vec![vec![1],vec![2],vec![3]; 设v0=&v[0]; 设v1=&v[1]; 设v

我开始学习Rust,这是我第一次在一种需要考虑内存分配的语言中工作(我从未使用过C)

作为练习,我决定看看如何创建一个新的向量,除了一些新元素之外,还包括来自另一个向量的一些元素。我的目标是创建一个向量来维护指向另一个向量中数据的指针,而不是复制或克隆该数据,这样新的内存只分配给其他元素。这就是下面代码中发生的情况,和/或是否有更好的方法来完成我正在尝试的工作

fn main(){
设v=vec![vec![1],vec![2],vec![3];
设v0=&v[0];
设v1=&v[1];
设v2=&vec![4];
设v3=vec![v0,v1,v2];
}
我使用嵌套向量是因为对我来说,当处理堆上的数据时,这个问题比处理堆栈上的数据更为重要,向量在堆上分配,而整数在堆栈上,但请记住,我对整个领域完全是新手,所以如果我所说的和所做的毫无意义,请随时告诉我 我的目标是创建一个向量来维护指向另一个向量中数据的指针,而不是复制或克隆该数据,这样新的内存只分配给其他元素。这就是下面代码中发生的情况吗[?]

是,
v3
包含对
v
中现有向量的引用。它不会创建新的或任何东西

当您处理堆上的数据而不是堆栈上的数据时,这个问题更为相关,向量在堆上分配,而整数在堆栈上


这句话并不是真的,尽管在处理此类问题时,使用非复制类型确实可以避免自欺欺人。值是否在堆栈上、堆上或不在其中任何一个上由Rust决定<代码>向量![vec![1]vs.
vec![1] 
在最外层的vec中的值与堆中的值一样多,如果我们要猜测Rust会做什么。

是的,就是这样-
v3
是一个包含三个向量引用的向量。问题是它没有你希望的那么有用,因为你已经共享了所有这些载体的引用,你不再被允许修改它们。谢谢,你关于突变的观点也被理解了。来自功能背景,这有助于我通过翻译成我更熟悉的习惯用法来理解内存分配是如何工作的,但我知道习惯用法更依赖于变异。在任何情况下,是否有更好或更惯用的方法来完成我的代码所完成的相同任务?这是问题的一部分:我不确定你想要完成什么。我的意思是,从字面上看,这是很清楚的,我想这就是你应该怎么做的,但我不明白这有什么用,或者你想实现什么。你的问题可以通过提供一个用例或者至少是这样做的动机来解决。这可以在Rust中完成,例如,请参见,但它远不简单,绝对不是一个学习项目。我甚至建议您暂时忘记clojure风格的内存管理方法,试着学习一下最可靠的方法。如果你只是想了解Rust中的借阅检查和内存操作,我建议。从看那本书,它看起来就像是为我写的!谢谢谢谢我有一个相关的问题,希望不会太离题,但是当你对一个向量进行切片时,编译器希望所有嵌套类型都实现克隆,这对我来说意味着自动切片克隆。那么,我的方法是否也可能是一种不进行克隆而生成逻辑片的方法?@grandinero当您获取向量的一个切片时,编译器希望所有嵌套类型都实现克隆-您认为这是为什么?是的。你说得对,我刚刚意识到我在给片上的_vec打电话,那是在克隆内容。