Top.Mail.Ru
Ответы

В чем различие?

1234567
 int even_last(std::vector<int> nums) { 
    int sum; 
    for(int i = 0; i != nums.size(); i += 2){ 
        sum += nums[i]; 
    } 
    return sum * nums.back(); 
} 

При использовании int i в цикле ответ выдается всегда верный - 30, но если использовать size_t i (как вроде бы и принято), то ответ получается вообще другой и всегда разный, почему это?

По дате
По рейтингу
Аватар пользователя
Высший разум

Разница в том, что переменная `int sum` не инициализирована начальным значением. При использовании `int i`, случайное значение в `sum` на старте может оказаться таким, что результат умножения получается 30. Но это непредсказуемо и неверно. При использовании `size_t i`, непредсказуемость остаётся, но результаты могут варьироваться из-за разных начальных значений `sum`. Корректно инициализируйте `sum` нулем (`int sum = 0;`), и код будет работать одинаково с `int` и `size_t`.

Аватар пользователя
Просветленный

Последние версии компилятора С++ должны инициировать int нулём. Но для size_t этого, видимо, не происходит, и берётся случайное значение со стека. Напишите size_t sum {}; и будет Вам счастье.