我正在寻找类似于slice::split_at_mut
的函数。我们将其命名为split_at
,并具有以下签名:
pub fn split_at<T>(v: Vec<T>, mid: usize) -> (Vec<T>, Vec<T>)
以至于
let v = vec![1, 2, 3, 4];
let (first, second) = split_at(v, 2);
assert_eq!(first, vec![1, 2]);
assert_eq!(second, vec![3, 4]);
该函数不应分配任何内存,只需将向量拆分为两个部分。由于生成的向量不会被修改,因此您无需担心容量。
仅夜间可用的方法Vec::into_raw_parts
似乎很有前途,但我使用的是稳定版本渠道,不允许使用这样的方法。
first
和second
都超出它们的作用域时,它可以回收内存?你的问题提醒我,即使Vec::into_raw_parts
已经稳定,我可能也不应该使用它,因为如果在second
之前删除first
,则second
可能引用一个悬空指针。 - nalzokbytes
。 - rodrigo