向量的有效组合最小和均值计算

Wur*_*rmD 2 c++

我需要向量中值的最小值和均值。

我用以下内容分别计算它们:

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;
}
Run Code Online (Sandbox Code Playgroud)

这两个都必须扫描向量。

是否有一种std 有效的方法来计算向量的最小值和均值,将其仅扫描一次?

Cal*_*eth 8

是的,您可以在同一通话中累计最小值和总和。不,它可能不会更有效率,也不会效率较低。

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;
}
Run Code Online (Sandbox Code Playgroud)