Vec::first în Rust

first returnează primul element, last ultimul, ca Option: None dacă vectorul este gol.

Sintaxă
pub fn first(&self) -> Option<&T>
pub fn last(&self) -> Option<&T>

Ce face Vec::first

first() este echivalentul sigur al lui v[0], iar last() al lui v[v.len() - 1]. Pentru un vector gol, ambele returnează None în loc să oprească programul.

Pentru modificare există first_mut() și last_mut(), care returnează Option<&mut T>. Dacă vrei și restul vectorului, split_first() și split_last() returnează elementul împreună cu slice-ul rămas.

Ce returnează

Some(&element) sau None pentru un vector gol.

Exemple

Exemplul 1: Prima și ultima temperatură

fn main() {
    let temperaturi = vec![12.5, 14.0, 9.5, 16.0];
    println!("prima: {:?}, ultima: {:?}", temperaturi.first(), temperaturi.last());

    let gol: Vec<f64> = Vec::new();
    println!("pe vector gol: {:?} {:?}", gol.first(), gol.last());
}

Rezultat

prima: Some(12.5), ultima: Some(16.0)
pe vector gol: None None

Exemplul 2: Coada de la ghișeu

Verificăm ambele capete deodată, cu un tuplu în if let. last_mut înlocuiește ultima persoană.

fn main() {
    let mut coada = vec!["Ana", "Mihai", "Ioana"];
    if let (Some(primul), Some(ultimul)) = (coada.first(), coada.last()) {
        println!("primul la rând: {primul}, ultimul: {ultimul}");
    }
    if let Some(u) = coada.last_mut() {
        *u = "Radu";
    }
    println!("{:?}", coada);

    if let Some((primul, restul)) = coada.split_first() {
        println!("intră {primul}; așteaptă {:?}", restul);
    }
}

Rezultat

primul la rând: Ana, ultimul: Ioana
["Ana", "Mihai", "Radu"]
intră Ana; așteaptă ["Mihai", "Radu"]

Greșeli frecvente

  • Scrii v[v.len() - 1]: pe un vector gol, scăderea dă attempt to subtract with overflow. v.last() tratează cazul gol.
  • Folosești v.first().unwrap() peste tot. Dacă vectorul poate fi gol, programul se oprește; folosește if let sau unwrap_or.

Comenzi înrudite

  • Vec::get: Citește elementul de pe o poziție fără risc de panic: returnează Some(&element) sau None dacă poziția nu există.
  • Vec::len: len returnează numărul de elemente din vector; is_empty spune dacă vectorul nu are niciun element.
  • Vec::push: push adaugă un element la sfârșitul vectorului; pop îl scoate pe ultimul și îl returnează ca Option.
  • VecDeque::front: Arată primul (front) sau ultimul (back) element al cozii, fără să-l scoată; None dacă coada e goală.
  • BTreeSet::first: Returnează cel mai mic (first) sau cel mai mare (last) element al mulțimii sortate; None dacă e goală.