Ce face Vec::reverse
reverse() schimbă elementele între ele două câte două, de la capete spre mijloc, fără să aloce memorie. Se poate aplica și pe o bucată: v[1..4].reverse().
Dacă vrei doar să parcurgi elementele de la coadă la cap, fără să modifici vectorul, folosește v.iter().rev().
Ce returnează
Nimic; vectorul este modificat.
Exemple
Exemplul 1: Inversarea unei liste și a unui cuvânt
fn main() {
let mut zile = vec!["luni", "marți", "miercuri"];
zile.reverse();
println!("{:?}", zile);
let mut litere: Vec<char> = "Brașov".chars().collect();
litere.reverse();
println!("{}", litere.into_iter().collect::<String>());
}
Rezultat
["miercuri", "marți", "luni"]
voșarB
Exemplul 2: reverse pe o bucată sau iter().rev() fără modificare
fn main() {
let numaratoare = vec![1, 2, 3, 4, 5];
for n in numaratoare.iter().rev() {
print!("{n} ");
}
println!("start!");
println!("vectorul rămâne: {:?}", numaratoare);
let mut v = numaratoare.clone();
v[1..4].reverse();
println!("doar mijlocul inversat: {:?}", v);
}
Rezultat
5 4 3 2 1 start!
vectorul rămâne: [1, 2, 3, 4, 5]
doar mijlocul inversat: [1, 4, 3, 2, 5]
Greșeli frecvente
- Scrii
let inversat = v.reverse();: rezultatul este(). Inversează pe loc sau creează un vector nou cuv.iter().rev().collect(). - Inversezi un text ca
Vec<u8>(octeți): literele cu diacritice au mai mulți octeți și textul se strică. Inversează caracterele (chars()).
Comenzi înrudite
Iterator::rev: Inversează direcția unui iterator: produce elementele de la ultimul la primul, fără să copieze nimic.Vec::sort: Sortează vectorul crescător, pe loc. sort este stabilă (păstrează ordinea elementelor egale); sort_unstable e mai rapidă.Vec::rotate_left: Rotește elementele spre stânga: primele mid elemente trec la final, în aceeași ordine. rotate_right face invers.DoubleEndedIterator: Iterator care poate produce valori și de la coadă (next_back); permite rev(), rfind() și parcurgerea din ambele capete.