rust - 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];
}
我使用了嵌套向量,因为对我来说,当您在堆上处理数据时,这个问题比在堆栈上更相关,并且当整数在堆栈上时,向量是在堆上分配的,但请记住,我是整个领域的新手,如果我所说的和所做的完全没有意义,请随时告诉我。
解决方案
我的目标是创建一个向量来维护指向另一个向量中数据的指针,而不是复制或克隆该数据,以便仅为其他元素分配新内存。这就是下面代码中发生的事情[?]
是v3
的,包含对v
. 它不会创建新的或任何东西。
当您在堆上处理数据而不是在堆栈上处理数据时,这个问题更相关,并且向量在堆上分配而整数在堆栈上
这句话并不是真的,尽管在处理此类问题时使用非 Copy 类型确实可以避免自欺欺人。值是在堆栈上、堆上还是不在任何一个上都由 Rust 决定;vec![vec![1]]
如果我们猜测 Rust 会做什么, vs vec![1]
. 将在最外层的 vec 中具有与堆上一样多的值。
推荐阅读
- ios - 无法使用本地化设置语言
- java - service.jar 中没有主要清单属性
- javascript - 使用 MS Graph 将 excel 转换为 pdf 返回错误文件
- java - java - 如何在具有3个表的记录的java中创建数据结构?
- python - 不理解这段代码的真假部分。我在此代码中的输入(所有整数)如何“为真”或“为假”?
- awk - 在新行中打印文件每列之前的第 1 列
- mysql - Laravel 刀片输入隐藏值请求只给出最后一个值,如何在请求中获取 uniqe id?
- c# - 使用 Photon 实时与 .NET 有连接问题
- ios - 如何转换 std::vector
使用 C++ 文件 iOS 项目时到 NSData - javascript - 从脚本中获取真或假(来自 JSON 文件)以显示为复选框