@ziplane

Почему условие не работает?

Хочу перевернуть цифры в векторе .
Первым циклом беру элементы слева, вторым с конца.
Как только во втором цикле будет выбран последний элемент меняю его на первый.
Последний элемент вектора я определю как номер итерации вектора ==длине вектора.
Однако условие не срабатывает , не пойму почему .
let mut mir = vec![1,2,3,4,5,6];

pub fn reverse(input:&mut Vec<i32>) {

    let mut n = input.len();
    let mut z = input.len();
    //  беру первый элемент вектора
    for i in 0.. n {
        // бегу до последнего элемента вектора
        for k in 0..z{
            // если k == последнему элементу
            if k == z {
                // меняю ее на первый элемент
                input.swap(i,k);
            }
            
            z -=1;
        }
        n -=1
    }
}
  • Вопрос задан
  • 151 просмотр
Решения вопроса 1
@ziplane Автор вопроса
Я так и не понял как сделать это в for.
Условие не срабатывало потому что я дурак. Счет начинается с 0 в массиве/векторе.
решение на while:
pub fn mirror(input:&mut Vec<i32>) {

    let mut n = input.len()-1;

    let mut i = 0;
    while ( i < n) {
        if i != n {
            input.swap(i,n);
            n = n-1;
        }
        i+=1
    }

}
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
keksmen
@keksmen
Just a programmer
Дело в том, что вот этот участок
for k in 0..z
определяет итерацию от 0 до z-1. Поэтому, k никогда не равно z.
Если нужна итерация от 0 до z, вам стоит использовать следующий синтаксис:
for k in 0..=z
Ответ написан
@humbug
Вектор переворачивается одним циклом от 0 до половины длины массива, свапая 0й и последний, 1й и предпоследний... и т.д.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы