У меня есть функция, которая получает образец (AN STD :: Vector
) в качестве ввода и вычисляет среднее значение образца: что лучше Чтобы обработать пустой входной корпус вектора?
Моя первая идея состоит в том, чтобы бросить исключение, как в этом фрагменте:
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, мне нравится возможность возврата «специального» двойного, чтобы сигнализировать о том, что произошло нечто неожиданное.
Есть ли другой способ справляться с пустым вектором? Спасибо.