2017-07-27 4 views
3

長いベクトルの最小値と最大値の両方を求めたい。次のコードは動作しますが、ベクトルを2回トラバースする必要があります。長いベクトルの最小値と最大値を求める

私は昔ながらの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 


} 
+3

[良いリファレンス](http://en.cppreference.com/w/cpp/algorithm)は常に便利です。 –

答えて

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をしている空ではありません。 は最初の最大要素を返し、minmax_elementは最後の最大要素を返します。max_elementは最初の最大要素を返し、minmax_elementは最後の最大要素を返します。例えば。 Aはあなたのソリューションによって発見され、そしてBが鉱山で発見された

1 2 1 2 
^^
    A B 

。 (これは安定性のためです; Alex Stepanov got the definition of max wrong in the original STL

関連する問題