关于vector:如何在Rust中获得Vector>的切片?

How do I get a slice of a Vec<T> in Rust?

Vec<T>的文档中找不到如何从指定范围检索切片。

标准库中是否有类似的内容:

1
2
let a = vec![1, 2, 3, 4];
let suba = a.subvector(0, 2); // Contains [1, 2];

Vec的文档在标题为"切片"的部分中对此进行了介绍。

您可以通过用Range(或RangeInclusiveRangeFromRangeToRangeToInclusiveRangeFull)建立索引来创建Vecarrayslice。 ,例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
fn main() {
    let a = vec![1, 2, 3, 4, 5];

    // With a start and an end
    println!("{:?}", &a[1..4]);

    // With a start and an end, inclusive
    println!("{:?}", &a[1..=3]);

    // With just a start
    println!("{:?}", &a[2..]);

    // With just an end
    println!("{:?}", &a[..3]);

    // With just an end, inclusive
    println!("{:?}", &a[..=2]);

    // All elements
    println!("{:?}", &a[..]);
}


如果您希望将整个Vec转换为切片,则可以使用deref强制:

1
2
3
4
5
6
fn main() {
    let a = vec![1, 2, 3, 4, 5];
    let b: &[i32] = &a;

    println!("{:?}", b);
}

在调用函数时自动施加强制:

1
2
3
4
5
6
7
8
fn print_it(b: &[i32]) {
    println!("{:?}", b);
}

fn main() {
    let a = vec![1, 2, 3, 4, 5];
    print_it(&a);
}

您也可以调用Vec::as_slice,但这并不常见:

1
2
3
4
5
fn main() {
    let a = vec![1, 2, 3, 4, 5];
    let b = a.as_slice();
    println!("{:?}", b);
}

另请参见:

  • 为什么不鼓励接受对String的引用(