找到长矢量的最小值和最大值

时间:2017-07-27 12:23:02

标签: c++ algorithm element min

我想找到长矢量的最小值和最大值。以下代码有效,但我需要遍历向量两次。

我可以使用旧式for循环,但我想知道是否有一种优雅的(c ++ 11,std)方式。

#include <vector>
#include <algorithm>

using namespace std;

int main(int argc, char** argv) {
     vector<double> C;

     // code to insert values in C not shown here

     const double cLower = *min_element(C.begin(), C.end());
     const double cUpper = *max_element(C.begin(), C.end());

     // code using cLower and cUpper


}

1 个答案:

答案 0 :(得分:6)

你的意思是std::minmax_element

auto mm = std::minmax_element(std::begin(c), std::end(c));
const double cLower = *mm.first;
const double cUpper = *mm.second;

请注意,这假设范围不为空(与现有解决方案一样),否则迭代器解引用为Undefined Behaviour

另请注意,这与您的解决方案并不完全相同,因为max_element返回第一个最大元素,minmax_element返回最后一个最大元素。 E.g。

1 2 1 2
  ^   ^
  A   B

您的解决方案找到了A,我的B被找到了。 (这是出于稳定的原因; Alex Stepanov got the definition of max wrong in the original STL。)