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șteif letsauunwrap_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ă.