Ce face Iterator::rev
rev() citește iteratorul de la coadă, folosind next_back(). Nu creează o copie inversată și nu modifică sursa. Funcționează doar pe iteratori care știu unde se termină (DoubleEndedIterator): vectori, tablouri, intervale, chars(), BTreeMap.
Pentru o numărătoare inversă, scrie (1..=10).rev(), nu 10..=1 (un interval cu începutul mai mare decât sfârșitul este gol). Ca toate adaptoarele, este leneș: nu face nimic până când iteratorul nu este consumat (de for, collect, sum, count etc.).
Ce returnează
Un iterator Rev cu elementele în ordine inversă.
Exemple
Exemplul 1: Numărătoare inversă și listă de la coadă
fn main() {
for n in (1..=5).rev() {
print!("{n} ");
}
println!("start!");
println!("10..=1 are {} elemente", (10..=1).count());
let istoric = ["deschis", "editat", "salvat"];
let recente: Vec<&str> = istoric.iter().rev().copied().collect();
println!("{:?}", recente);
}
Rezultat
5 4 3 2 1 start!
10..=1 are 0 elemente
["salvat", "editat", "deschis"]
Exemplul 2: Text inversat și palindrom
fn main() {
let oras = "Brașov";
let inversat: String = oras.chars().rev().collect();
println!("{oras} -> {inversat}");
let cuvant = "capac";
let palindrom = cuvant.chars().eq(cuvant.chars().rev());
println!("{cuvant} este palindrom: {palindrom}");
}
Rezultat
Brașov -> voșarB
capac este palindrom: true
Greșeli frecvente
- Scrii
for i in 10..0pentru numărătoare inversă: bucla nu rulează deloc. Scrie(0..10).rev()(atenție, dă 9..0) sau(1..=10).rev(). - Inversezi octeții unui text (
bytes().rev()): literele cu diacritice se strică. Foloseștechars().rev(). - Apelezi
rev()pe un iterator fără capăt ((1..),from_fn): nu compilează.
Comenzi înrudite
DoubleEndedIterator: Iterator care poate produce valori și de la coadă (next_back); permite rev(), rfind() și parcurgerea din ambele capete.Vec::reverse: Inversează pe loc ordinea elementelor: primul devine ultimul, ultimul devine primul.Iterator::step_by: Produce primul element și apoi fiecare al n-lea: sare peste elemente cu un pas fix.Range: Intervalul a..b: toate valorile de la a inclusiv până la b exclusiv. Este iterator, se folosește în for și la tăierea slice-urilor.