0Pricing
Learn Rust Coding · Урок

Создание и заполнение векторов

Создавайте Vec и добавляйте элементы.

«Создание и заполнение векторов» — бесплатный урок Learn Rust Coding на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Learn Rust Coding, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Learn Rust Coding содержит 4 уроков всего.

Что такое вектор

Вектор — это расширяемый список значений одного типа. В отличие от массива фиксированного размера, вектор может уменьшаться или увеличиваться во время работы программы.

В Rust тип записывается как Vec<T>, где T — тип содержащихся элементов, например Vec<i32> для целых чисел.

Пустой вектор

Создать новый пустой вектор можно с помощью Vec::new(). Поскольку в нём пока нет значений, Rust не может определить тип элементов, поэтому обычно его указывают явно.

Здесь мы сообщаем Rust, что вектор будет содержать целые числа типа i32.

fn main() {
    let v: Vec<i32> = Vec::new();
    println!("len = {}", v.len());
}

Макрос vec!

Самый быстрый способ создать вектор с начальными значениями — использовать макрос vec!. Перечислите значения внутри квадратных скобок.

Rust определяет тип элементов по этим значениям, поэтому здесь явное указание типа не требуется.

fn main() {
    let nums = vec![10, 20, 30];
    println!("{:?}", nums);
}

Вывод вектора

Весь вектор выводится с помощью отладочного форматировщика {:?}, а не обычного {}. Отладочный формат показывает значения внутри квадратных скобок.

Используйте {:#?}, чтобы получить удобное многострочное представление большого вектора.

fn main() {
    let names = vec!["Ann", "Bo", "Cy"];
    println!("{:?}", names);
}

Добавление значений

Чтобы добавить значение в конец вектора, вызовите push. Вектор должен быть объявлен как mut, поскольку добавление изменяет его.

Каждый вызов push добавляет один элемент, увеличивая длину на единицу.

fn main() {
    let mut v = Vec::new();
    v.push(1);
    v.push(2);
    v.push(3);
    println!("{:?}", v);
}

Тип определяется первым вызовом push

Если начать с Vec::new() без указания типа, Rust ждёт первого вызова push, чтобы определить тип элементов.

Ниже добавление 3.5 сообщает Rust, что это Vec<f64>. Все последующие значения должны иметь тот же тип.

fn main() {
    let mut prices = Vec::new();
    prices.push(3.5);
    prices.push(9.0);
    println!("{:?}", prices);
}

Заполнение повторяющимися значениями

Макрос vec! может повторять значение. Запишите vec![value; count], чтобы создать вектор, содержащий это значение count раз.

Это удобно для создания списка нулей или значений по умолчанию.

fn main() {
    let zeros = vec![0; 5];
    println!("{:?}", zeros);
}

Заполнение в цикле

Вектор можно заполнять, добавляя значения внутри цикла. Здесь мы добавляем квадраты чисел от 1 до 4.

Создание пустого вектора с последующим добавлением значений — распространённый приём, когда значения вычисляются по ходу выполнения.

fn main() {
    let mut squares = Vec::new();
    for n in 1..=4 {
        squares.push(n * n);
    }
    println!("{:?}", squares);
}

Вместимость и длина

Длина — это количество элементов, которое сейчас содержит вектор. Вместимость — это объём зарезервированного места до того, как потребуется увеличить выделенную память.

Если Вы примерно знаете, сколько элементов добавите, Vec::with_capacity(n) заранее зарезервирует место и позволит избежать повторного перераспределения памяти.

fn main() {
    let mut v = Vec::with_capacity(10);
    v.push(1);
    println!("len {}, cap {}", v.len(), v.capacity());
}

Из массива

Массив можно преобразовать в вектор. Один из простых способов — .to_vec(): он копирует элементы массива в новый принадлежащий программе вектор.

Это полезно, когда исходные данные имеют фиксированный размер, но впоследствии должны расширяться.

fn main() {
    let arr = [1, 2, 3];
    let v = arr.to_vec();
    println!("{:?}", v);
}

Проверка на пустоту

Используйте is_empty(), чтобы проверить, нет ли в векторе элементов. Этот метод возвращает bool и понятнее, чем сравнение длины с нулём.

Такую проверку удобно выполнять перед чтением первого элемента.

fn main() {
    let v: Vec<i32> = Vec::new();
    if v.is_empty() {
        println!("nothing here yet");
    }
}

Быстрая проверка

Проверьте, насколько хорошо Вы поняли создание и заполнение векторов.

Итоги

Вы научились создавать векторы с помощью Vec::new() и макроса vec!, а также заполнять их с помощью push, повторений, циклов и to_vec().

Вы также узнали о различии между длиной и вместимостью и о проверке пустоты. Далее Вы научитесь читать значения вектора и перебирать их в цикле.

Часто задаваемые вопросы

Урок «Создание и заполнение векторов» бесплатный?

Да — полный текст урока «Создание и заполнение векторов» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Learn Rust Coding, подпишись на CoddyKit PRO. Курс Learn Rust Coding содержит 4 уроков всего.

Чему я научусь в уроке «Создание и заполнение векторов»?

Создавайте Vec и добавляйте элементы. Ты практикуешь Learn Rust Coding с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Learn Rust Coding?

Предыдущий опыт не требуется. Learn Rust Coding на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.

Сколько времени занимает урок «Создание и заполнение векторов»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Learn Rust Coding?

Да. Каждый урок Learn Rust Coding включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Создание и заполнение векторов
  2. Индексация и итерация
  3. Увеличение и уменьшение
  4. Векторы структур
← Назад к Learn Rust Coding