sch*_*312 3 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
}
Run Code Online (Sandbox Code Playgroud)
你的意思是std::minmax_element?
auto mm = std::minmax_element(std::begin(c), std::end(c));
const double cLower = *mm.first;
const double cUpper = *mm.second;
Run Code Online (Sandbox Code Playgroud)
请注意,这假设范围不为空(与现有解决方案一样),否则迭代器解除引用是未定义的行为.
另请注意,这与您的解决方案并不完全相同,因为max_element返回第一个最大元素,并minmax_element返回最后一个最大元素.例如
1 2 1 2
^ ^
A B
Run Code Online (Sandbox Code Playgroud)
A您的解决方案在哪里找到,并且B由我的解决方案找到.(这是出于稳定的原因; Alex Stepanov max在原始STL中得到了错误的定义.)