Ce face Vec::resize
resize(n, valoare) aduce vectorul la exact n elemente. Dacă vectorul este mai lung, se comportă ca truncate(n). Dacă este mai scurt, adaugă la final copii ale lui valoare până la lungimea n.
Valoarea trebuie să implementeze Clone, pentru că este copiată pentru fiecare poziție nouă. Pentru valori care se calculează (sau pentru tipuri fără Clone), există resize_with(n, || ...), care apelează un closure pentru fiecare element nou.
Parametri
| Parametru | Descriere |
|---|---|
new_len |
Lungimea finală dorită. |
value |
Valoarea copiată în pozițiile noi (ignorată dacă vectorul se micșorează). |
Ce returnează
Nimic; vectorul este modificat.
Exemple
Exemplul 1: Mărire și micșorare
fn main() {
let mut locuri = vec!["ocupat"; 3];
locuri.resize(5, "liber");
println!("{:?}", locuri);
locuri.resize(2, "nefolosit");
println!("{:?}", locuri);
}
Rezultat
["ocupat", "ocupat", "ocupat", "liber", "liber"]
["ocupat", "ocupat"]
Exemplul 2: resize cu vectori și resize_with
Fiecare vector nou adăugat de resize este o copie independentă. resize_with apelează closure-ul pentru fiecare poziție nouă.
fn main() {
let mut note_pe_luni: Vec<Vec<u32>> = Vec::new();
note_pe_luni.resize(3, Vec::new());
note_pe_luni[0].push(9);
note_pe_luni[2].push(10);
println!("{:?}", note_pe_luni);
let mut id = 100;
let mut coduri = vec![1, 2];
coduri.resize_with(5, || {
id += 1;
id
});
println!("{:?}", coduri);
}
Rezultat
[[9], [], [10]]
[1, 2, 101, 102, 103]
Greșeli frecvente
- Folosești
resizeca să rezervi memorie.resizechiar adaugă elemente (lungimea crește). Pentru loc rezervat fără elemente foloseștereserve. - Încerci
resizecu un tip care nu areClone: the trait bound `T: Clone` is not satisfied. Foloseșteresize_with.
Comenzi înrudite
Vec::truncate: truncate păstrează doar primele len elemente; clear golește vectorul. Ambele lasă capacitatea neschimbată.Vec::fill: Scrie aceeași valoare în toate pozițiile vectorului (sau ale unei bucăți din el), fără să schimbe lungimea.Vec::with_capacity: Creează un vector cu loc rezervat dinainte; capacity spune cât loc are, iar reserve mărește locul fără să adauge elemente.Vec: Vectorul dinamic din Rust: o listă de elemente de același tip, ținute unul după altul în memorie, care crește singură.