У меня есть функция, которая получает выборку (std::vector<double>
) в качестве входных данных и вычисляет среднее значение выборки: каков наилучший способ обработки пустого входного вектора?
Моя первая идея заключается в том,бросить исключение, как в этом фрагменте кода:
double average(const std::vector<double>& sample)
{
size_t sz = sample.size();
if (sz==0) throw std::exception("unexpected empty vector");
double acc = 0;
for (size_t i=0; i<sz; ++i) acc += sample[i];
return acc/sz;
}
Но я думаю, что другое решение может состоять в том, чтобы вернуть NaN:
double average(const std::vector<double>& sample)
{
size_t sz = sample.size();
if (sz==0) return std::numeric_limits<double>::quiet_NaN();
double acc = 0;
for (size_t i=0; i<sz; ++i) acc += sample[i];
return acc/sz;
}
Мне нравится исключение, потому что оно показывает, где проблема возникла во времяесли я получу NaN в конечном результате длинных вычислений, у меня будет больше трудностей, чтобы понять, где родился NaN.В любом случае с NaN мне нравится возможность возвращать «специальный» дубль, чтобы сигнализировать о том, что произошло что-то неожиданное.
Есть ли другой способ справиться с пустым вектором?Спасибо.