c++ - vector 的高效组合最小值和平均值计算

标签 c++

我需要 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/

相关文章:

c++ - 是否可以在 C++ 中检查 (this == NULL) 以终止分离线程的执行?

c++ - 如何一起使用两个参数包?

c++ - 方程解析库 C++

c++ - 如何在 C++ 应用程序中自动检查菜单的完整性?

c++ - QT 中的 64 位 int Spin Box

c++ - 为什么 GCC 说 main 的多重定义?我有一个主要的

c++ - 在 cuda 中通过 Gauss-Jordan 方法对复数进行矩阵求逆

c++ - 如何处理位字段中的单位( bool )成员?

c++ - 使用可编辑的 QComboBox 从列表中选择值或获取手动输入

c++ - 你如何在 C++ 中实现阶乘函数?