ЛЕКЦІЯ 17

Колекции: Vec<T>, String, HashMap<K, V>

Рецензія: Error Handling

План

  • Vec: динамічний масив
  • String: динамічний текст
  • HashMap: ключ-значення

Vec<T>

Vec<T>

Динамічний масив (growable array). На heap. Можна додавати/видаляти елементи.

Vec операції

let mut v = Vec::new();
v.push(1);
v.push(2);
v.push(3);

println!("{:?}", v);  // [1, 2, 3]

let vec = vec![1, 2, 3];  // macro
let first = &vec[0];  // 1
let opt = vec.get(10);  // None

String

String

Динамічний, growable text (UTF-8). На heap. str - fixed-size reference.

String та &str

let mut s = String::from("hello");
s.push_str(" world");  // мutable
println!("{}", s);  // "hello world"

let s2 = &s;  // &String -> &str coercion
let s3: &str = "literal";  // string literal

Ітерація по Vec

let v = vec![1, 2, 3, 4, 5];

for item in &v {
  println!("{}", item);
}

for item in v.iter() {
  println!("{}", item);
}

let doubled: Vec<_> = v.iter().map(|x| x * 2).collect();

HashMap<K, V>

HashMap<K, V>

Хеш-таблиця для пар ключ-значення. O(1) lookup середня.

HashMap використання

use std::collections::HashMap;

let mut map = HashMap::new();
map.insert("key1", "value1");
map.insert("key2", "value2");

let val = map.get("key1");  // Some("value1")
let val_or = map.get("key3").copied().unwrap_or("");

for (k, v) in &map {
  println!("{}: {}", k, v);
}

Колекции порівняння

Запитання 1

Як додати елемент в Vec?

  • push()
  • append()
  • add()
✅ Правильна відповідь: push()

Запитання 2

Чим відрізняється String від &str?

  • Нічим
  • String на heap, &str - reference
  • &str на heap
✅ Правильна відповідь: String на heap, &str - reference

Помилка: Ownership Vec

⚠️ ЗАСТЕРЕЖЕННЯ

❌ Неправильно

✓ Правильно

Підсумки

  • Vec: динамічний масив
  • String: динамічний UTF-8 текст
  • HashMap: хеш-таблиця
  • Всі на heap з ownership контролем

Далі

Наступна лекція:

Лекція 18: Модули та Организация коду

Дякую за увагу! 💾

← Повернутися до списку лекцій