是否可以使用STD::Min与STD::Min一起进行累积?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (19)

我正在尝试std::accumulate与之结合std::min。像这样的东西:

vector<int> V{2,1,3};   
cout << accumulate(V.begin()+1, V.end(), V.front(), std::min<int>);

可能吗?是否有可能没有编写包装函子std::min? 我知道我可以用lambdas做到这一点:

vector<int> V{2,1,3};   
cout << std::accumulate(
    V.begin()+1, V.end(),
    V.front(), 
    [](int a,int b){ return min(a,b);}
);

我知道有std::min_element。我不是想要找到最小元素,我需要std::accumulatestd::min(或::min)用于我的库,它允许像C ++中的表达式那样进行函数编程。

提问于
用户回答回答于

template <class T> const T& min(const T& a, const T& b);

template <class T, class BinaryPredicate>
const T& min(const T& a, const T& b, BinaryPredicate comp);

因此,你的代码是不明确的,编译器不知道选择哪个超载。你可以通过使用中间函数指针来声明你想要哪一个:

#include <algorithm>
#include <iostream>
#include <vector>

int main()
{
  std::vector<int> V{2,1,3};
  int const & (*min) (int const &, int const &) = std::min<int>;
  std::cout << std::accumulate(V.begin() + 1, V.end(), V.front(), min);
}

扫码关注云+社区