2017-07-27 3 views
3

Ich möchte sowohl das Minimum und Maximum eines langen Vektors finden. Der folgende Code funktioniert, aber ich muss den Vektor zweimal durchlaufen.Finden Minimum und Maximum eines langen Vektors

Ich könnte eine altmodische for-Schleife verwenden, aber ich frage mich, ob es eine elegante (C++ 11, Std) Art und Weise, es zu tun ist.

#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

[Eine gute Referenz] (http://en.cppreference.com/w/cpp/algorithm) ist immer praktisch. –

Antwort

6

Sie meinen wie std::minmax_element?

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

Hinweis: dieser den Bereich übernimmt nicht leer ist (wie auch Ihre bestehende Lösung), da sonst die Iterator Dereferenzierungen Undefined Behaviour sind.

Beachten Sie auch, dass dies nicht ganz mit Ihrer Lösung übereinstimmt, da max_element das erste größte Element zurückgibt und minmax_element das letzte größte Element zurückgibt. Z.B.

1 2 1 2 
^^
    A B 

Wo A durch Ihre Lösung gefunden wird, und B durch Mine gefunden. (Dies ist aus Gründen der Stabilität; Alex Stepanov got the definition of max wrong in the original STL.)

Verwandte Themen