Vec::reverse în Rust

Inversează pe loc ordinea elementelor: primul devine ultimul, ultimul devine primul.

Sintaxă
pub fn reverse(&mut self)

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 cu v.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.