Vec
Vec — стандартний буфер із змінним розміром, виділений у купі:
fn main() {
let mut v1 = Vec::new();
v1.push(42);
println!("v1: len = {}, capacity = {}", v1.len(), v1.capacity());
let mut v2 = Vec::with_capacity(v1.len() + 1);
v2.extend(v1.iter());
v2.push(9999);
println!("v2: len = {}, capacity = {}", v2.len(), v2.capacity());
// Канонічний макрос для ініціалізації вектора з елементами.
let mut v3 = vec![0, 0, 1, 2, 3, 4];
// Зберігаємо тільки парні елементи.
v3.retain(|x| x % 2 == 0);
println!("{v3:?}");
// Видаляємо дублікати, що йдуть підряд.
v3.dedup();
println!("{v3:?}");
}
Vec реалізує Deref<Target = [T]>, який означає, що ви можете викликати методи зрізу на Vec.
This slide should take about 5 minutes.
Vec— це тип колекції разом ізStringіHashMap. Дані, які він містить, зберігаються в купі. Це означає, що кількість даних не потрібно знати під час компіляції. Він може рости або зменшуватися під час виконання.- Зверніть увагу, що
Vec<T>також є узагальненим типом, але вам не потрібно вказуватиTявно. Як завжди з визначенням типу Rust,Tбуло встановлено під час першого викликуpush. vec![...]— це канонічний макрос для використання замістьVec::new(), який підтримує додавання початкових елементів до вектора.- Щоб індексувати вектор, ви використовуєте
[], але вони панікують, якщо вийдуть за межі. Крім того, використанняgetповернеOption. Функціяpopвидалить останній елемент. - Зрізи розглядаються на 3-й день. Наразі студентам потрібно лише знати, що значення типу
Vecдає доступ до всіх задокументованих методів зрізів.