MST

星途 面试题库

面试题:Rust泛型函数在复杂场景下的设计与优化

假设有一个需求,需要实现一个Rust泛型函数,它接受一个容器(如`Vec`),容器中的元素类型是一个结构体,该结构体实现了多个trait,包括`Debug`、`Clone`以及一个自定义的`Processable` trait(需自行定义此trait,包含一个处理元素的方法)。函数需要遍历容器中的元素,对每个元素调用`Processable` trait中的方法进行处理,然后将处理后的结果收集到一个新的`Vec`中返回。同时,要考虑如何在性能和代码可读性之间取得平衡,比如避免不必要的克隆操作等。请写出完整的代码实现。
40.2万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试
// 定义自定义trait
trait Processable {
    fn process(&self) -> Self;
}

// 泛型函数实现
fn process_container<T: Processable + Clone + std::fmt::Debug>(input: &Vec<T>) -> Vec<T> {
    input.iter()
        .map(|element| element.process())
        .collect()
}

// 示例结构体并实现相关trait
struct ExampleStruct {
    value: i32,
}

impl Processable for ExampleStruct {
    fn process(&self) -> Self {
        ExampleStruct { value: self.value * 2 }
    }
}

impl Clone for ExampleStruct {
    fn clone(&self) -> Self {
        ExampleStruct { value: self.value }
    }
}

impl std::fmt::Debug for ExampleStruct {
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
        write!(f, "ExampleStruct {{ value: {} }}", self.value)
    }
}

fn main() {
    let input_vec: Vec<ExampleStruct> = vec![ExampleStruct { value: 1 }, ExampleStruct { value: 2 }];
    let result = process_container(&input_vec);
    println!("{:?}", result);
}