【发布时间】:2016-11-03 05:23:19
【问题描述】:
我通过做矩阵数学来学习 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 的引用。这是否意味着不可能将所有“切片”从指针转换为向量类型?唯一的方法是使用循环对每个项目进行 deref 并将它们存储在一个新的向量中?
【问题讨论】:
-
就个人而言,我会让
new接受Vec。这样你就不会对调用者强加一个克隆;调用者可以决定克隆数据,或者如果他们不再需要它,则只传递其Vec的所有权。