#stack-allocated #array #heap-allocated #array-vec #vec-t #size #moves

vec_to_array

将堆分配的 Vec<T> 转换为类型为 T 且大小为 N 的栈分配数组

5 个版本

0.2.3 2023年10月26日
0.2.2 2023年10月26日
0.2.1 2023年10月26日
0.2.0 2023年10月26日
0.1.0 2023年10月26日

#1195 in 算法


用于 graphrs

MIT 协议

8KB
108

vec_to_array

将堆分配的 Vec 转换到栈分配数组。在大多数情况下,您可能希望优先使用 try_into (https://doc.rust-lang.net.cn/alloc/vec/struct.Vec.html#impl-TryFrom%3CVec%3CT,+A%3E%3E-for-%5BT;+N%5D),除非您需要将数组放在栈上。

let vec: Vec<i64> = vec![1, 2, 3];
let array: [i64; 3] = vec_to_array!(vec, i64, 3);
assert_eq!(array, [1, 2, 3]);

let vec: Vec<i32> = vec![1, 2, 3];
let array: Result<[i32; 3], VecToArrayError> = try_vec_to_array!(vec, i32, 3);
assert_eq!(array.unwrap(), [1, 2, 3]);

动机

对于 Vec,大于12大小的数组没有实现 Into

let v: Vec<i32> = vec![0; 768];
let arr: [i32; 768] = v.into(); /// will not compile

let v: Vec<i32> = vec![0; 768];
let arr: Result<[i32; 768], _ > = v.try_into(); /// Will work but is on the heap

此crate添加了 vec_to_array!try_vec_to_array! 作为解决方案


lib.rs:

将堆分配的 Vec<T> 转换为类型为 T 且大小为 N 的栈分配数组。

无运行时依赖