我需要向量中值的最小值和均值。
我用以下内容分别计算它们:
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 有效的方法来计算向量的最小值和均值,将其仅扫描一次?
是的,您可以在同一通话中累计最小值和总和。不,它可能不会更有效率,也不会效率较低。
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)