Я изучаю ржавчину, делая математическую матрицу. Самый первый шаг - создать новую матрицу строк и столбцов и инициализировать матрицу с элементами значений в строчном порядке.конвертировать входной вектор типа & [T] в Vec <T>
Если я хочу передать вектор значения матрицы ввода как & [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, & [Т] является ссылкой на набор Ts изложены последовательно в памяти. Означает ли это, что невозможно преобразовать все «срезы» из указателей в тип вектора? И единственный способ сделать это - использовать цикл, чтобы сделать deref каждого элемента и сохранить их в новом векторе?
Лично я бы просто сделать 'new' принять' Vec'. Таким образом, вы не накладываете клоун на вызывающего абонента; вызывающий может решить клонировать данные или просто передать права собственности на их 'Vec', если они больше не нужны. –