Увеличение и уменьшение
Вставляйте, удаляйте и изменяйте размер.
«Увеличение и уменьшение» — бесплатный урок Learn Rust Coding на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Learn Rust Coding, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Learn Rust Coding содержит 4 уроков всего.
Векторы могут менять размер
Важная особенность векторов — они могут менять размер во время выполнения программы. Вы можете добавлять элементы, когда появляется больше данных, и удалять их, когда они больше не нужны.
При любом изменении размера вектор должен быть объявлен как mut.
Увеличение с помощью push
Метод push добавляет один элемент в конец, увеличивая размер вектора на единицу. Это самый распространённый способ увеличить вектор.
Ниже размер вектора увеличивается с 0 до 3 элементов.
fn main() {
let mut v = Vec::new();
v.push("a");
v.push("b");
v.push("c");
println!("len = {}", v.len());
}Удаление с помощью pop
Метод pop удаляет последний элемент и возвращает его, оборачивая в Option. Обычно вы получаете Some(value), а если вектор уже был пуст, — None.
Размер вектора уменьшается на единицу.
fn main() {
let mut v = vec![1, 2, 3];
let last = v.pop();
println!("popped {:?}", last);
println!("now {:?}", v);
}Вставка в середину
Метод insert помещает значение по указанному индексу и сдвигает последующие элементы вправо. Индекс должен находиться в диапазоне от 0 до текущей длины.
Здесь мы вставляем 99 на позицию 1.
fn main() {
let mut v = vec![10, 20, 30];
v.insert(1, 99);
println!("{:?}", v);
}Удаление по индексу
Метод remove удаляет элемент по индексу, возвращает его и сдвигает последующие элементы влево, заполняя освободившееся место.
Будьте внимательны: удаление по несуществующему индексу приводит к панике.
fn main() {
let mut v = vec![10, 20, 30];
let gone = v.remove(0);
println!("removed {}", gone);
println!("{:?}", v);
}Быстрое удаление с помощью swap_remove
Если порядок элементов не важен, используйте более быстрый метод swap_remove. Он перемещает последний элемент на место удалённого, вместо того чтобы сдвигать все остальные.
Порядок изменяется, зато не приходится тратить время на сдвиг элементов.
fn main() {
let mut v = vec![1, 2, 3, 4];
let x = v.swap_remove(0);
println!("took {}", x);
println!("{:?}", v);
}Удаление всех элементов
Метод clear удаляет все элементы сразу, оставляя пустой вектор длиной 0. Выделенная для вектора ёмкость сохраняется, чтобы использовать её повторно.
Это удобно, когда вы хотите заново заполнить вектор.
fn main() {
let mut v = vec![1, 2, 3];
v.clear();
println!("empty? {}", v.is_empty());
}Обрезка до заданной длины
Метод truncate укорачивает вектор до выбранной длины, удаляя лишние элементы с конца. Если вектор уже короче, ничего не происходит.
Здесь мы оставляем только первые два элемента.
fn main() {
let mut v = vec![1, 2, 3, 4, 5];
v.truncate(2);
println!("{:?}", v);
}Объединение с помощью extend
Метод extend добавляет все элементы из другой коллекции. Это похоже на вызов push для каждого элемента, выполненный за один шаг.
Ниже второй список добавляется в конец первого.
fn main() {
let mut v = vec![1, 2];
v.extend(vec![3, 4, 5]);
println!("{:?}", v);
}Сохранение выбранных элементов с помощью retain
Метод retain оставляет только элементы, прошедшие проверку, и удаляет остальные прямо в векторе. Ему передаётся замыкание, возвращающее логическое значение.
Здесь мы оставляем только чётные числа.
fn main() {
let mut v = vec![1, 2, 3, 4, 5, 6];
v.retain(|n| n % 2 == 0);
println!("{:?}", v);
}Сортировка элементов
Метод sort перестраивает элементы на месте — от наименьшего к наибольшему. Длина вектора не меняется, изменяется только порядок элементов.
Для сортировки вектор должен быть объявлен как mut.
fn main() {
let mut v = vec![3, 1, 4, 1, 5];
v.sort();
println!("{:?}", v);
}Быстрая проверка
Проверьте, насколько хорошо вы поняли увеличение и уменьшение размера векторов.
Повторение
Вы увеличивали векторы с помощью push, insert и extend, а уменьшали их с помощью pop, remove, swap_remove, clear и truncate.
Вы также отбирали элементы с помощью retain и упорядочивали их с помощью sort. Далее вы научитесь хранить структуры внутри векторов.
Часто задаваемые вопросы
Урок «Увеличение и уменьшение» бесплатный?
Да — полный текст урока «Увеличение и уменьшение» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Learn Rust Coding, подпишись на CoddyKit PRO. Курс Learn Rust Coding содержит 4 уроков всего.
Чему я научусь в уроке «Увеличение и уменьшение»?
Вставляйте, удаляйте и изменяйте размер. Ты практикуешь Learn Rust Coding с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Learn Rust Coding?
Предыдущий опыт не требуется. Learn Rust Coding на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «Увеличение и уменьшение»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Learn Rust Coding?
Да. Каждый урок Learn Rust Coding включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Создание и заполнение векторов
- Индексация и итерация
- Увеличение и уменьшение
- Векторы структур