【问题标题】:What is the type of a vector that contains another vector?包含另一个向量的向量的类型是什么?
【发布时间】:2017-01-26 08:42:46
【问题描述】:
struct Tree<T> {
    leaf: Vec<?>
}

fn main() {
    let fuji = Tree { leaf: vec![1, 2, [[3, 4, 5], 6, [7, 8, 9]] };
}

我不知道我应该在Vec&lt;&gt; 中添加什么以便上面的代码可以运行。

【问题讨论】:

  • 这行不通。出于许多原因(其中至少是您的实际分配无论如何都不会编译)。如果您完全删除 struct 并尝试将您的尝试分配给(我认为是锯齿状的?)向量,您会看到即使您让编译器为您推断类型,编译器也不会允许它。例如:let fuji = vec![1, 2, [[3, 4, 5], 6, [7, 8, 9]]];。我建议 working your way through the Rust Book 更好地了解 Rust 和向量在 Rust 中可以做什么。
  • 除了我上面的评论:在 Rust 中构建树状结构不是一件容易的事情。如果您对 Rust 的一般语法/使用感到不舒服,我绝对建议您不要尝试实现任何严重依赖节点之间关系的树结构。至少在您牢牢掌握所有权、引用以及如何在 Rust 中使用不安全代码之前。
  • @S 谢谢你的建议。看来我是用python的方式写Rust...
  • @SimonWhitehead a tree 在 Rust 中很好用。 图表很难。

标签: vector types rust


【解决方案1】:

Rust 的Vector 写成Vec&lt;T&gt;,这意味着它的每个元素都必须是T 类型。如果您需要向量的向量,这是可能的 - 然后是 Vec&lt;Vec&lt;T&gt;&gt;(现在每个元素都是 Vec&lt;T&gt;)。

在您编写的代码中:

vec![1, 2, [[3, 4, 5], 6, [7, 8, 9]]

这是尝试创建一个包含整数的向量和一个由固定长度 (3) 整数数组组成的固定长度 (3) 数组整数。哇!这远非Vec 数据类型所要求的同质性。

你可以像这样创建一个向量的向量:

let v: Vec<Vec<i32>> = vec![vec![1,2,3], vec![4,5], vec![6]];

由于向量(与数组不同)的类型不受其长度限制,因此这是Vectors 的有效Vector,而这又是有效的,因为它们仅包含整数(i32)。

我建议通过The Rust Book,这是基本 Rust 知识的最佳来源。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-27
    • 2014-01-22
    • 2022-01-15
    相关资源
    最近更新 更多