Vec::rotate_left în Rust

Rotește elementele spre stânga: primele mid elemente trec la final, în aceeași ordine. rotate_right face invers.

Sintaxă
pub fn rotate_left(&mut self, mid: usize)
pub fn rotate_right(&mut self, k: usize)

Ce face Vec::rotate_left

rotate_left(k) mută primele k elemente la sfârșitul vectorului; restul avansează spre început. După rotire, elementul care era pe poziția k ajunge primul. rotate_right(k) mută ultimele k elemente la început.

Rotirea se face pe loc, fără vector nou. Este utilă pentru ture prin rotație, liste circulare sau cifruri simple. Valoarea k trebuie să fie cel mult lungimea; o valoare mai mare dă panic (folosește k % v.len()).

Parametri

Parametru Descriere
mid / k Cu câte poziții se rotește (0 până la len()).

Ce returnează

Nimic.

Exemple

Exemplul 1: Cine e de serviciu azi

fn main() {
    let mut ture = vec!["Ana", "Mihai", "Ioana", "Radu"];
    for zi in ["luni", "marți", "miercuri", "joi", "vineri"] {
        println!("{zi:9} de serviciu: {}", ture[0]);
        ture.rotate_left(1);
    }
}

Rezultat

luni      de serviciu: Ana
marți     de serviciu: Mihai
miercuri  de serviciu: Ioana
joi       de serviciu: Radu
vineri    de serviciu: Ana

Exemplul 2: Stânga, dreapta, doar o bucată

fn main() {
    let mut v = vec![1, 2, 3, 4, 5, 6];
    v.rotate_left(2);
    println!("rotate_left(2):  {:?}", v);
    v.rotate_right(2);
    println!("rotate_right(2): {:?}", v);
    v[..3].rotate_left(1);
    println!("doar primele 3:  {:?}", v);
}

Rezultat

rotate_left(2):  [3, 4, 5, 6, 1, 2]
rotate_right(2): [1, 2, 3, 4, 5, 6]
doar primele 3:  [2, 3, 1, 4, 5, 6]

Greșeli frecvente

  • Dai o valoare mai mare decât lungimea: v.rotate_left(10) pe un vector cu 4 elemente oprește programul. Folosește v.rotate_left(10 % v.len()) (și verifică întâi că vectorul nu e gol).
  • Confunzi direcțiile: rotate_left(1) trimite primul element la final.

Comenzi înrudite

  • Vec::reverse: Inversează pe loc ordinea elementelor: primul devine ultimul, ultimul devine primul.
  • VecDeque: Coada cu două capete: adaugă și scoate rapid elemente atât la început, cât și la sfârșit.
  • Vec::split_at: Împarte vectorul în două slice-uri la o poziție, fără copiere: elementele dinainte și elementele de la poziție încolo.