Ce face VecDeque::push_back
push_back adaugă la sfârșit, push_front la început. pop_back și pop_front scot elementul de la capătul respectiv și îl returnează în Some; dacă coada este goală, returnează None.
Combinația push_back + pop_front dă o coadă obișnuită (FIFO). push_back + pop_back dă o stivă, ca la Vec. Toate patru operațiile sunt rapide, indiferent de lungime.
Parametri
| Parametru | Descriere |
|---|---|
value |
Elementul adăugat (la push_back / push_front). |
Ce returnează
push_* nu returnează nimic. pop_* returnează Option<T>.
Exemple
Exemplul 1: Ambele capete
use std::collections::VecDeque;
fn main() {
let mut d = VecDeque::new();
d.push_back(2);
d.push_back(3);
d.push_front(1);
d.push_front(0);
println!("{:?}", d);
println!("pop_front = {:?}", d.pop_front());
println!("pop_back = {:?}", d.pop_back());
println!("rămân {:?}", d);
}
Rezultat
[0, 1, 2, 3]
pop_front = Some(0)
pop_back = Some(3)
rămân [1, 2]
Exemplul 2: E palindrom?
Păstrăm doar literele, mici. Apoi scoatem câte o literă din fiecare capăt și le comparăm.
use std::collections::VecDeque;
fn palindrom(text: &str) -> bool {
let mut litere: VecDeque<char> = text
.chars()
.filter(|c| c.is_alphanumeric())
.flat_map(|c| c.to_lowercase())
.collect();
while litere.len() > 1 {
if litere.pop_front() != litere.pop_back() {
return false;
}
}
true
}
fn main() {
for t in ["Ele fac cafele", "Ene purta patru pene", "Rust e fain"] {
println!("{t:22} -> {}", palindrom(t));
}
}
Rezultat
Ele fac cafele -> true
Ene purta patru pene -> true
Rust e fain -> false
Exemplul 3: Cereri urgente trec în față
Cererile normale intră la coadă, cele urgente în față; procesarea se face mereu din față.
use std::collections::VecDeque;
fn main() {
let mut cereri = VecDeque::new();
for (text, urgent) in [("factură", false), ("parolă uitată", false), ("server căzut", true), ("ofertă", false)] {
if urgent {
cereri.push_front(text);
} else {
cereri.push_back(text);
}
}
while let Some(c) = cereri.pop_front() {
println!("rezolv: {c}");
}
}
Rezultat
rezolv: server căzut
rezolv: factură
rezolv: parolă uitată
rezolv: ofertă
Greșeli frecvente
- Te aștepți ca
pop_frontsă returneze direct elementul: rezultatul esteOption<T>. Foloseștewhile let Some(x) = c.pop_front(). - Confunzi capetele:
fronteste începutul (poziția 0),backeste sfârșitul.
Comenzi înrudite
VecDeque: Coada cu două capete: adaugă și scoate rapid elemente atât la început, cât și la sfârșit.VecDeque::front: Arată primul (front) sau ultimul (back) element al cozii, fără să-l scoată; None dacă coada e goală.Vec::push: push adaugă un element la sfârșitul vectorului; pop îl scoate pe ultimul și îl returnează ca Option.BinaryHeap: Coadă de priorități: pop scoate mereu cel mai mare element, iar peek îl arată fără să-l scoată.