首页 > 解决方案 > Rust:以最少的新内存分配创建包含现有向量元素的新向量

问题描述

我开始学习 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];
}

我使用了嵌套向量,因为对我来说,当您在堆上处理数据时,这个问题比在堆栈上更相关,并且当整数在堆栈上时,向量是在堆上分配的,但请记住,我是整个领域的新手,如果我所说的和所做的完全没有意义,请随时告诉我。

标签: rust

解决方案


我的目标是创建一个向量来维护指向另一个向量中数据的指针,而不是复制或克隆该数据,以便仅为其他元素分配新内存。这就是下面代码中发生的事情[?]

v3的,包含对v. 它不会创建新的或任何东西。

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

这句话并不是真的,尽管在处理此类问题时使用非 Copy 类型确实可以避免自欺欺人。值是在堆栈上、堆上还是不在任何一个上都由 Rust 决定;vec![vec![1]]如果我们猜测 Rust 会做什么, vs vec![1]. 将在最外层的 vec 中具有与堆上一样多的值。


推荐阅读