В Rust векторы — это динамические массивы, размер которых может увеличиваться или уменьшаться. Реверс вектора означает изменение порядка его элементов так, чтобы последний элемент стал первым, и наоборот. В этой статье мы рассмотрим несколько методов обращения вектора в Rust, сопровождаемые примерами кода.
Метод 1: использование метода reverse
fn main() {
let mut vec = vec![1, 2, 3, 4, 5];
vec.reverse();
println!("{:?}", vec);
}
Выход: [5, 4, 3, 2, 1]
Метод 2: создание нового вектора с перевернутыми элементами
fn main() {
let vec = vec![1, 2, 3, 4, 5];
let reversed_vec: Vec<_> = vec.iter().rev().cloned().collect();
println!("{:?}", reversed_vec);
}
Выход: [5, 4, 3, 2, 1]
Метод 3. Итерация и замена элементов
fn main() {
let mut vec = vec![1, 2, 3, 4, 5];
let len = vec.len();
for i in 0..len/2 {
vec.swap(i, len - i - 1);
}
println!("{:?}", vec);
}
Выход: [5, 4, 3, 2, 1]
Метод 4. Использование стека для обращения вектора
fn main() {
let vec = vec![1, 2, 3, 4, 5];
let mut stack: Vec<_> = vec.into_iter().collect();
let reversed_vec: Vec<_> = stack.drain(..).collect();
println!("{:?}", reversed_vec);
}
Выход: [5, 4, 3, 2, 1]
Метод 5: рекурсивное обращение вектора
fn reverse_vec(vec: &mut [i32]) {
let len = vec.len();
if len <= 1 {
return;
}
vec.swap(0, len - 1);
reverse_vec(&mut vec[1..len - 1]);
}
fn main() {
let mut vec = vec![1, 2, 3, 4, 5];
reverse_vec(&mut vec);
println!("{:?}", vec);
}
Выход: [5, 4, 3, 2, 1]
В этой статье мы рассмотрели пять различных методов обращения вектора в Rust. Эти методы включают использование метода reverse, создание нового вектора с перевернутыми элементами, итерацию и замену элементов, использование стека и рекурсивное обращение вектора. В зависимости от вашего конкретного варианта использования вы можете выбрать метод, который лучше всего соответствует вашим потребностям.