Ce face VecDeque::front
front() și back() returnează o referință la elementul de la capăt, în Some, sau None pentru o coadă goală. Coada nu se modifică: e ca și cum te-ai uita cine urmează la rând.
front_mut() și back_mut() returnează Option<&mut T>, ca să poți modifica elementul pe loc.
Ce returnează
Option<&T>.
Exemple
Exemplul 1: Cine urmează
use std::collections::VecDeque;
fn main() {
let mut coada = VecDeque::from(["Ana", "Mihai", "Ioana"]);
println!("primul: {:?}, ultimul: {:?}", coada.front(), coada.back());
if let Some(u) = coada.back_mut() {
*u = "Radu";
}
println!("{:?}", coada);
let goala: VecDeque<&str> = VecDeque::new();
println!("coadă goală: {:?}", goala.front());
}
Rezultat
primul: Some("Ana"), ultimul: Some("Ioana")
["Ana", "Mihai", "Radu"]
coadă goală: None
Exemplul 2: Procesăm doar cât timp primul element e gata
Comenzile sunt în ordinea sosirii, cu minutul la care sunt gata. Ne uităm la prima cu front și o scoatem doar dacă e gata.
use std::collections::VecDeque;
fn main() {
let mut comenzi = VecDeque::from([(3, "pizza"), (5, "supă"), (12, "tort")]);
let acum = 6;
while let Some(&(gata_la, ce)) = comenzi.front() {
if gata_la > acum {
println!("{ce} nu e gata (minutul {gata_la}), așteptăm");
break;
}
comenzi.pop_front();
println!("livrez {ce}");
}
println!("rămân: {:?}", comenzi);
}
Rezultat
livrez pizza
livrez supă
tort nu e gata (minutul 12), așteptăm
rămân: [(12, "tort")]
Greșeli frecvente
- Folosești
coada[0]pe o coadă care poate fi goală:panic.front()returneazăNone. - Ții referința de la
front()și apoi apelezipop_front(): cannot borrow as mutable because it is also borrowed as immutable. Copiază valoarea (Some(&x)sau.copied()) înainte.
Comenzi înrudite
VecDeque: Coada cu două capete: adaugă și scoate rapid elemente atât la început, cât și la sfârșit.VecDeque::push_back: Adaugă (push) și scoate (pop) elemente la oricare capăt al cozii: back este sfârșitul, front este începutul.Vec::first: first returnează primul element, last ultimul, ca Option: None dacă vectorul este gol.BinaryHeap: Coadă de priorități: pop scoate mereu cel mai mare element, iar peek îl arată fără să-l scoată.