vector - Rust 泛型向量<Vector<T>>

标签 vector rust

我正在努力尝试使用rust ,但我被困在一个泛型类型的东西上。
您肯定知道第 10.1 章(通用数据类型)中的示例。我想创建一个包含 i32 向量和 char 向量的向量。
但不知何故,我无法让它工作。

fn largest<T: PartialOrd + Copy>(list: &[T]) -> T {
    let mut largest = list[0];

    for &item in list.iter() {
        if item > largest {
            largest = item;
        }
    }

    largest
}

fn main() {
    let number_list = vec![34, 50, 25, 100, 65];

    let result = largest(&number_list);
    println!("The largest number is {}", result);

    let char_list = vec!['y', 'm', 'a', 'q'];

    let result = largest(&char_list);
    println!("The largest char is {}", result);
}

我现在想创建一个矢量
let mut vecvec = Vec<Vec<T>>::new();
vecvec.push(number_list);
vecvec.push(char_list);

不幸的是,它不起作用。我希望你有建议。
提前致谢。

最佳答案

首先,“它不起作用”从来没有帮助。它显然“不起作用”,否则您不会寻求帮助。
其次,提供您实际使用的代码(在操场上)比猜测“不工作”的代码应该去哪里要容易得多。
第三,

let mut vecvec = Vec<Vec<T>>::new();
T需要在某个地方定义,并且必须是有意义的。
vecvec.push(number_list);
vecvec.push(char_list);
Vec<T>表示 vec 的所有元素必须具有相同的类型。在这里你有一个 Vec<i32>Vec<char> .它们不是同一种类型,它们不能调和到同一种类型,所以它们不能放在同一个向量中:Rust 没有无处不在的类型删除或“根类型”à la Java,你可以'不要只是说你有“一个向量的向量”,然后在运行时填充空白。
这意味着您需要某种间接来“隐藏”分歧,或者是一个枚举,其中包含您想要的每种类型的 vec 的变体:
enum Wrapper {
    Numbers(Vec<i32>),
    Chars(Vec<char>)
}
或者一个特征,您可以通过它使用特征对象。

关于vector - Rust 泛型向量<Vector<T>>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60989833/

相关文章:

vector - 向量的向量的内存布局是什么?

java - 用于收集数学 vector 的良好 Java 类

rust - 如何记录二进制 Rust crate 项目?

Rust - 创建 HashMap ,它使用它从迭代器存储的部分数据

generics - 通用函数接受 &str 或移动字符串而不复制

r - 使用逻辑向量进行向量索引

c++ - 二维 vector - 查找重复元素/获取索引位置并计算重复项

algorithm - 一张照片转矢量 'scribbled line'算法

rust - 将整个宏输入传递给另一个宏

rust - 如何解码 URL 并将查询字符串作为 HashMap?