VecDeque::front în Rust

Arată primul (front) sau ultimul (back) element al cozii, fără să-l scoată; None dacă coada e goală.

Sintaxă
pub fn front(&self) -> Option<&T>
pub fn back(&self) -> Option<&T>

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 apelezi pop_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ă.