返回向量的第一项

jgi*_*ich 2 rust

我正在尝试编写一个速记函数,该函数返回向量的第一个元素:

pub fn first() -> Option<&T> {
    let v = Vec::new();
    v.first()
}
Run Code Online (Sandbox Code Playgroud)

当然哪个会失败:

错误:缺少生命周期说明符[E0106]

有什么办法可以使这项工作吗?

小智 7

要在没有复制的情况下获取第一个元素:

vec.into_iter().nth(0)

但它会破坏一个向量。

  • 类似的是 `vec.into_iter().next()` (6认同)

Sim*_*ead 5

不在当前状态。

基本上,当first()返回此处时,将v被丢弃。这使得从函数中返回引用是不安全的,因为现在引用指向一个空值。

一种选择是传递向量,并返回对第一项的引用:

fn main () {
    let v = vec![1,2,3,4];

    println!("{:?}", first(&v).unwrap()); // Prints 1
}

fn first<T>(v: &Vec<T>) -> Option<&T> {
    v.first()
}
Run Code Online (Sandbox Code Playgroud)

但是,这似乎是多余的,因此在不完全知道您要执行的操作的情况下,这似乎是一个不错的选择。

如果您提出问题,我会扩大我的答案。