MST
星途 面试题库

面试题:Rust中复杂类型的运算符重载及泛型应用

定义一个泛型结构体`Matrix<T>`表示矩阵,其中`T`是矩阵元素类型(假设`T`实现了`Add` trait)。矩阵存储为二维数组`Vec<Vec<T>>`。请实现`+`运算符重载,用于两个同维度矩阵相加,返回一个新的同维度矩阵。此外,还需考虑矩阵维度不一致时如何处理(可通过`Result`类型返回错误信息)。
47.6万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试
use std::ops::Add;

// 定义泛型结构体Matrix
struct Matrix<T> 
where 
    T: Add<Output = T> + Clone,
{
    data: Vec<Vec<T>>,
}

// 实现 + 运算符重载
impl<T> Add for Matrix<T> 
where 
    T: Add<Output = T> + Clone,
{
    type Output = Result<Matrix<T>, String>;

    fn add(self, other: Matrix<T>) -> Self::Output {
        if self.data.len() != other.data.len() || self.data[0].len() != other.data[0].len() {
            return Err("矩阵维度不一致".to_string());
        }

        let mut result_data = Vec::new();
        for (i, row) in self.data.iter().enumerate() {
            let mut new_row = Vec::new();
            for (j, elem) in row.iter().enumerate() {
                let new_elem = elem.clone() + other.data[i][j].clone();
                new_row.push(new_elem);
            }
            result_data.push(new_row);
        }

        Ok(Matrix { data: result_data })
    }
}