繁体   English   中英

将&[T]类型的输入向量转换为Vec <T>

[英]convert input vector of type &[T] to Vec<T>

我正在通过做矩阵数学来学习Rust。 第一步是创建一个新的行和列矩阵,并使用大行顺序的值初始化元素中的矩阵。

如果我想将输入矩阵值向量传递为&[T],但是我不确定如何用元素值初始化矩阵。

pub struct Matrix<T> {
    data: Vec<T>,
    row: usize,
    col: usize,
}

/// Creates a new matrix of `row` rows and `col` columns, and initializes
/// the matrix with the elements in `values` in row-major order.
pub fn new(row: usize, col: usize, values: &[T]) -> Matrix<T> {
    Matrix {
        data: *values, // ??
        row: row,
        col: col,
    }
}


fn main() {
    let x = Matrix::new(2, 3, &[-2, -1, 0, 1, 2, 3]);
    let y = Matrix::new(2, 3, &[0, 0, 0, 0, 0, 0]);
    // z = x + y;

}

基于这篇文章 ,&[T]是对在内存中顺序排列的一组T的引用。 这是否意味着不可能将所有“切片”从指针转换为向量类型? 唯一的方法是使用循环对每个项目进行解引用并将其存储在新向量中?

可以,但不能通过* (取消引用)。 您会发现, &[T]借来的东西,因此您无法保留它。 类型Matrix<T> 拥有data 您不能简单地借用某些东西( values )然后像拥有它一样将其赠与(“在这里,矩阵,获取这些值,您可以保留它们”)。

您可以做的是复制借来的数据并将其存储为拥有的类型( Vec<T> )。 现在,您可以放弃此数据副本,因为您拥有它。 从借用到拥有的转换可以通过to_owned()方法完成,例如:

pub fn new(row: usize, col: usize, values: &[T]) -> Matrix<T> {
    Matrix {
        data: values.to_owned(),
        //          ^^^^^^^^^^^
        row: row,
        col: col,
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM