Выбор ответа Middle Алгоритмы STL и ranges обновлено
Тип результата accumulate
Вопрос
Что вернёт std::accumulate(v.begin(), v.end(), 0) для std::vector<double> v{0.5, 0.5, 1.5}?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: 1: аккумулятор int, дробь отбрасывается на каждом шаге. Тип аккумулятора берётся из начального значения: int.
Варианты ответа
- 2.5: сумма считается в
doubleпо типу элементов - 2: сумма 2.5 округляется до
intтолько в конце - 1: аккумулятор
int, дробь отбрасывается на каждом шагеправильный ответ - Ошибка компиляции:
intиdoubleне складываются здесь
Разбор
Тип аккумулятора берётся из начального значения: int. Шаги: 0 + 0.5 = 0.5 превращается в 0, затем снова 0, затем 0 + 1.5 = 1.5 превращается в 1. Правильно писать 0.0.
- 2.5 получится при начальном значении
0.0. - 2 получилось бы при округлении только итоговой суммы.
- Компилируется, в лучшем случае с предупреждением о сужении.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.