【发布时间】:2021-07-23 20:02:50
【问题描述】:
我想从Vec 中提取一个范围,方法是使用它并返回一个仅包含所需数据的新 Vec。我希望在不需要复制数据或进行任何分配的情况下发生这种情况。在 C 语言中,我会根据需要移动指针、更改长度字段并释放内存。
目前我正在使用drain,但我不确定它的性能特征(它会复制数据吗?)或者它的惯用程度。例如,如果我想要前 4 个元素,我会这样做:
fn main() {
let mut a = vec![1,2,3,4,5,6,7,8];
// Only want to keep the first 4 elements
let a: Vec<u32> = a.drain(..4).collect();
println!("{:?}", a);
}
我已经看过from_raw_parts 方法,但如果可能的话,我想避免对指针等感到烦躁。
【问题讨论】:
-
你可以查看drain的来源,看看它在做什么。提示:当您使用doc.rust-lang.org 时,方法右侧的
src文本是指向该方法实现的链接。我使用您在问题中提供的链接链接了drain的来源。 -
如果只想要前4个元素,可以使用vec.truncate(4)
标签: optimization memory rust