Ce face Vec::split_off
split_off(at) scoate elementele de pe pozițiile at..len() și le pune într-un vector nou, pe care îl returnează. Vectorul original păstrează primele at elemente.
Elementele sunt mutate, nu copiate. split_off(0) mută tot conținutul în vectorul nou, iar split_off(len()) returnează un vector gol. O poziție mai mare decât lungimea oprește programul cu panic.
Dacă vrei doar să privești cele două jumătăți, fără să le muți în vectori separați, folosește split_at, care returnează două slice-uri.
Parametri
| Parametru | Descriere |
|---|---|
at |
Poziția de tăiere, între 0 și len(). Elementul de pe această poziție ajunge în vectorul nou. |
Ce returnează
Un Vec<T> nou cu elementele de la at până la final.
Exemple
Exemplul 1: Împărțirea clasei în două grupe
fn main() {
let mut elevi = vec!["Ana", "Bogdan", "Cristina", "Dan", "Elena", "Florin"];
let grupa2 = elevi.split_off(3);
println!("grupa 1: {:?}", elevi);
println!("grupa 2: {:?}", grupa2);
}
Rezultat
grupa 1: ["Ana", "Bogdan", "Cristina"]
grupa 2: ["Dan", "Elena", "Florin"]
Exemplul 2: Cazurile de la capete
fn main() {
let mut v = vec![1, 2, 3];
let tot = v.split_off(0);
println!("split_off(0): v = {:?}, nou = {:?}", v, tot);
let mut w = vec![1, 2, 3];
let nimic = w.split_off(3);
println!("split_off(len): w = {:?}, nou = {:?}", w, nimic);
}
Rezultat
split_off(0): v = [], nou = [1, 2, 3]
split_off(len): w = [1, 2, 3], nou = []
Greșeli frecvente
- Crezi că elementul de pe poziția
atrămâne în vectorul original. El ajunge primul în vectorul nou. - Folosești
split_offdoar ca să citești cele două părți.split_atnu mută nimic și nu alocă un vector nou.
Comenzi înrudite
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.Vec::truncate: truncate păstrează doar primele len elemente; clear golește vectorul. Ambele lasă capacitatea neschimbată.Vec::drain: Scoate din vector elementele dintr-un interval de poziții și le dă înapoi ca iterator, mutate (fără copiere).Vec::extend_from_slice: extend_from_slice adaugă copii ale elementelor dintr-un slice; append mută toate elementele altui vector și îl golește.