use std::ops::{Mul, Add}; pub struct Array2<T>{ shape:[usize;2], data: Vec<T> } impl<T: Default + Copy + Add + Mul+From<f32>> Array2<T> { fn new(height:usize,width:usize) ->Array2<T> { Array2 { shape: [height,width], data: vec![Default::default();height*width] } } fn range(start:i32,end:i32,shape:[usize;2])->Array2<T> { assert!(start>=end); Array2{ shape, data:(start .. end).map(|x| x as T ).collect() } } } i
时间: 2023-12-26 09:04:41 浏览: 94
从技术流到实战派:数据中台建设路径探索.docx
这段代码定义了一个二维数组类型 `Array2<T>`,其中 `T` 是泛型类型参数,需要满足实现 `Default`、`Copy`、`Add`、`Mul` 和 `From<f32>` 这些 trait。该类型包含两个字段:一个表示数组的形状,即行数和列数,类型为 `[usize; 2]`;另一个是数组的数据,类型为 `Vec<T>`。
实现中提供了两个方法:
- `new` 方法用于创建一个指定大小的二维数组,使用默认值填充数组。
- `range` 方法用于创建一个指定范围内的二维数组,其中范围由 `start` 和 `end` 指定,数组的形状由 `shape` 参数指定。该方法使用了 `assert!` 宏来检查 `start` 和 `end` 的值是否满足条件。
最后,代码定义了一个类型别名 `i`,但没有给它赋值。
阅读全文