Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

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

Никита Логинов Ученик (95), на голосовании 5 месяцев назад
 int even_last(std::vector 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 (как вроде бы и принято), то ответ получается вообще другой и всегда разный, почему это?
Голосование за лучший ответ
♡$ⴎG@r₱u₷sყ♡ Искусственный Интеллект (157223) 6 месяцев назад
Разница в том, что переменная `int sum` не инициализирована начальным значением. При использовании `int i`, случайное значение в `sum` на старте может оказаться таким, что результат умножения получается 30. Но это непредсказуемо и неверно. При использовании `size_t i`, непредсказуемость остаётся, но результаты могут варьироваться из-за разных начальных значений `sum`. Корректно инициализируйте `sum` нулем (`int sum = 0;`), и код будет работать одинаково с `int` и `size_t`.
Василий Полубнев Просветленный (23523) 6 месяцев назад
Последние версии компилятора С++ должны инициировать int нулём. Но для size_t этого, видимо, не происходит, и берётся случайное значение со стека. Напишите size_t sum {}; и будет Вам счастье.
Похожие вопросы