Вектора

Вектора — это массивы с изменяемым размером. Как и у срезов, их размер не известен при компиляции, но он может увеличиваться и уменьшаться в любое время. Вектор определяется тремя словами: указатель на данные, длина вектора и его ёмкость. Ёмкость определяет, сколько памяти резервируется для вектора. Вектор может увеличиваться, пока его длина меньше его ёмкости. При необходимости превысить заданное значение объёма, вектору повторно выделяется память большего объёма.

fn main() {
    // Итераторы можно собрать в вектора
    let collected_iterator: Vec<i32> = (0..10).collect();
    println!("Собираем (0..10) в: {:?}", collected_iterator);

    // Для инициализации вектора можно использовать макрос `vec!`
    let mut xs = vec![1i32, 2, 3];
    println!("Начальный вектор: {:?}", xs);

    // Вставляет новый элемент в конце вектора
    println!("Добавляем четвёртый элемент в вектор");
    xs.push(4);
    println!("Вектор: {:?}", xs);

    // Ошибка! Неизменяемые вектора не могут увеличиваться
    collected_iterator.push(0);
    // ИСПРАВЬТЕ ^ Закомментируйте эту строку

    // Метод `len` возвращает текущий размер вектора
    println!("Размер вектора: {}", xs.len());

    // Обращение к элементам вектора записывается с помощью квадратных скобок
    // (нумерация элементов начинается с 0)
    println!("Второй элемент: {}", xs[1]);

    // `pop` удаляет последний элемент из вектора и возвращает его
    println!("Удаляем последний элемент: {:?}", xs.pop());

    // Обращение к элементу за пределами вектора вызывает ошибку
    println!("Четвёртый элемент: {}", xs[3]);

    // По вектору можно легко итерироваться
    println!("xs состоит из:");
    for x in xs.iter() {
        println!("> {}", x);
    }

    // К итератору вектора можно применить адаптер `enumerate`,
    // число итераций хранится в переменной (`i`)
    for (i, x) in xs.iter().enumerate() {
        println!("In position {} we have value {}", i, x);
    }

    // Благодаря методу `iter_mut`, можно обойти вектор
    // при этом изменить каждое значение в нем.
    for x in xs.iter_mut() {
        *x *= 3;
    }
    println!("Обновленный вектор: {:?}", xs);
}

Подробную информацию о методах объекта Vec можно почитать в разделе модуля std::vec