我需要 vector 中值的最小值和平均值。
我用以下方法分别计算它们:
template <class T>
T Minimum(std::vector<T> & v){ return *min_element(begin(v), end(v)); }
template <class T>
T Mean(std::vector<T> & v)
{
T sum = std::accumulate(v.begin(), v.end(), static_cast<T>(0));
T mean = sum / v.size();
return mean;
}
这两个都要扫 vector 。
是否有一种标准的有效方法来计算只扫描一次的 vector 的最小值和平均值?
最佳答案
是的,您可以在同一调用中累加最小值和总和。不,它可能不会更有效,也不会更不有效。
template <typename T>
std::pair<T, T> MeanAndMin(const std::vector<T> & v)
{
auto zero = std::make_pair(static_cast<T>(0), std::numeric_limits<T>::max());
auto plus = [](auto pair, auto elem) { return std::make_pair(pair.first + elem, std::min(pair.second, elem)); };
auto res = std::accumulate(begin(v), end(v), zero, plus);
res.first /= v.size();
return res;
}
关于c++ - vector 的高效组合最小值和平均值计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56630188/