use std::ops::{Mul, Add}; pub struct Array2<T>{ shape:[usize;2], data: Vec<T> } impl<T: Default + Copy + Add + Mul> 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() } } }
时间: 2023-12-26 07:04:41 浏览: 244
[WinError 126] 找不到指定的模块,detectron_ops_gpu.dl
这是一个 Rust 语言中的二维数组结构体 `Array2<T>`,它有两个字段,一个是 `shape`,一个是 `data`,分别表示数组的维度和数据。在这个结构体中,`T` 是泛型类型,需要满足 `Default`、`Copy`、`Add` 和 `Mul` 四个 trait 的约束。
该结构体实现了两个方法,一个是 `new`,用于创建一个指定大小的二维数组,另一个是 `range`,用于创建一个范围内的二维数组。`new` 方法使用了 Rust 中的默认值语法 `Default::default()`,它会根据类型的默认值来初始化数组中的元素;`range` 方法使用了 Rust 中的迭代器 `Iterator`,它将范围 `[start, end)` 中的整数转换为泛型类型,并将它们收集到一个 `Vec` 中作为数据。在 `range` 方法的实现中,使用了 `assert!` 宏来检查参数的合法性。
阅读全文