Создание и заполнение векторов
Создавайте 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 — локальная установка не требуется.
Все уроки этого курса
- Создание и заполнение векторов
- Индексация и итерация
- Увеличение и уменьшение
- Векторы структур