Ce face Vec::truncate
truncate(n) scurtează vectorul la primele n elemente; restul sunt eliberate (pentru String-uri, memoria lor este eliberată imediat). Dacă n este mai mare sau egal cu lungimea, nu se întâmplă nimic: nu dă eroare și nu adaugă elemente.
clear() scoate toate elementele; este același lucru cu truncate(0). Vectorul rămâne utilizabil.
Niciuna nu eliberează memoria rezervată: capacitatea rămâne aceeași. Asta e util când refolosești același vector într-o buclă: după clear(), următoarele push nu mai alocă memorie. Dacă vrei memoria înapoi, apelează după aceea shrink_to_fit().
Parametri
| Parametru | Descriere |
|---|---|
len |
Câte elemente să rămână (de la început). |
Ce returnează
Nimic. Elementele scoase nu sunt returnate; pentru a le primi folosește drain sau split_off.
Exemple
Exemplul 1: Podiumul unui clasament
fn main() {
let mut clasament = vec!["Ana", "Mihai", "Ioana", "Radu", "Elena"];
clasament.truncate(3);
println!("podium: {:?}", clasament);
clasament.truncate(10); // mai mare decât lungimea: nu face nimic
println!("după truncate(10): {:?}", clasament);
let cap = clasament.capacity();
clasament.clear();
println!("după clear: {:?}, len = {}, capacity = {} (era {cap})", clasament, clasament.len(), clasament.capacity());
}
Rezultat
podium: ["Ana", "Mihai", "Ioana"]
după truncate(10): ["Ana", "Mihai", "Ioana"]
după clear: [], len = 0, capacity = 5 (era 5)
Exemplul 2: Același vector refolosit într-o buclă
clear() golește vectorul la fiecare propoziție, dar păstrează memoria alocată pentru următoarea.
fn main() {
let propozitii = ["Ana are mere", "Ion merge la Iași", "Azi plouă"];
let mut cuvinte_lungi = Vec::new();
for p in propozitii {
cuvinte_lungi.clear();
for c in p.split_whitespace() {
if c.chars().count() > 3 {
cuvinte_lungi.push(c);
}
}
println!("{p:20} -> {:?}", cuvinte_lungi);
}
}
Rezultat
Ana are mere -> ["mere"]
Ion merge la Iași -> ["merge", "Iași"]
Azi plouă -> ["plouă"]
Greșeli frecvente
- Te aștepți ca
truncate(10)să mărească vectorul la 10 elemente.truncatedoar micșorează; pentru a mări foloseșteresize. - Crezi că
clear()eliberează memoria. Capacitatea rămâne; dacă vectorul a fost uriaș și nu-l mai umpli, apeleazăshrink_to_fit()sau lasă-l să iasă din domeniu.
Comenzi înrudite
Vec::drain: Scoate din vector elementele dintr-un interval de poziții și le dă înapoi ca iterator, mutate (fără copiere).Vec::split_off: Taie vectorul în două la o poziție: primele elemente rămân, restul sunt mutate într-un vector nou returnat.Vec::resize: Schimbă lungimea vectorului: îl taie dacă e prea lung sau adaugă copii ale unei valori până la noua lungime.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::len: len returnează numărul de elemente din vector; is_empty spune dacă vectorul nu are niciun element.