gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 08:22:51 25 4
gpt4 key购买 nike

我正在通过矩阵数学学习 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;

}

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

最佳答案

这是可能的,但不是通过 * (取消引用)。你看,&[T]借来的东西,所以你不能保留它。类型Matrix<T> 拥有data .您不能简单地借用一些东西 (values),然后像拥有它一样送人(“在这里,Matrix,获取这些值,您可以保留它们”)。

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

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

关于pointers - 将 &[T] 类型的输入向量转换为 Vec<T>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40394372/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com