我在Vec<T>
的文档中找不到如何从指定范围中检索切片。
标准库中是否存在类似内容:
let a = vec![1, 2, 3, 4];
let suba = a.subvector(0, 2); // Contains [1, 2];
答案 0 :(得分:43)
Vec
的文档涵盖了the section titled "slicing"。
您可以使用slice
(或Vec
,array
,{对其进行索引来创建Range
或RangeFrom
的RangeTo
{3}}),RangeFull
:
fn main() {
let a = vec![1, 2, 3, 4, 5];
// With a start and an end
println!("{:?}", &a[1..4]);
// With just a start
println!("{:?}", &a[2..]);
// With just an end
println!("{:?}", &a[..3]);
// All elements
println!("{:?}", &a[..]);
}
答案 1 :(得分:3)
如果您希望将整个Vec
转换为切片,可以使用 deref强制:
fn main() {
let a = vec![1, 2, 3, 4, 5];
let b: &[i32] = &a;
println!("{:?}", b);
}
调用函数时会自动应用此强制:
fn print_it(b: &[i32]) {
println!("{:?}", b);
}
fn main() {
let a = vec![1, 2, 3, 4, 5];
print_it(&a);
}
您也可以致电Vec::as_slice
,但不太常见:
fn main() {
let a = vec![1, 2, 3, 4, 5];
let b = a.as_slice();
println!("{:?}", b);
}
另见: