Метод drain
Метод drain удаляет указанный диапазон
элементов из вектора и возвращает итератор,
который позволяет получить доступ к удалённым
элементам. Параметром метод принимает диапазон
индексов элементов, которые нужно удалить.
После вызова метода вектор уменьшается,
а оставшиеся элементы сдвигаются.
Синтаксис
vec.drain(range)
Пример
Давайте удалим элементы с индексами от 1 до 3
из вектора vec![1, 2, 3, 4, 5]
и соберём удалённые элементы в новый вектор:
fn main()
{
let mut vec = vec![1, 2, 3, 4, 5];
let drained: Vec<i32> = vec.drain(1..3).collect();
println!("{:?}", drained);
println!("{:?}", vec);
}
Результат выполнения кода:
[2, 3]
[1, 4, 5]
Пример
Давайте удалим все элементы из вектора
vec!["a", "b", "c", "d", "e"],
используя полный диапазон:
fn main()
{
let mut vec = vec!["a", "b", "c", "d", "e"];
let drained: Vec<&str> = vec.drain(..).collect();
println!("{:?}", drained);
println!("{:?}", vec);
}
Результат выполнения кода:
["a", "b", "c", "d", "e"]
[]
Пример
Давайте удалим элементы с индексами от 2 до конца
из вектора vec![1, 2, 3, 4, 5]
и выведем каждый удалённый элемент отдельно:
fn main()
{
let mut vec = vec![1, 2, 3, 4, 5];
for val in vec.drain(2..)
{
println!("{}", val);
}
println!("{:?}", vec);
}
Результат выполнения кода:
3
4
5
[1, 2]