私は行列計算を行うことでRustを学んでいます。最初のステップは、新しい行と列の行列を作成し、要素を行優先順序で初期化します。&[T]タイプの入力ベクトルをVecに変換します<T>
入力行列値ベクトルを& [T]として渡したいが、要素値で行列を初期化する方法がわからない。このpostに基づい
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]はメモリに順次レイアウトされたTSのセットへの参照です。それは、すべての "スライス"をポインタからベクトル型に変換することができないことを意味しますか?唯一の方法は、ループを使って各項目のderefを行い、それらを新しいベクトルに格納することです。
個人的に、私はちょうど 'Vec'を受け入れるnew''になるだろう。そうすることで、呼び出し側にクローンを課すことはありません。呼び出し側はデータを複製するか、Vecの所有権を渡すかを決めることができます。 –