web-dev-qa-db-ger.com

Wie kann ich den maximalen (oder minimalen) Wert in einem Vektor erhalten?

Wie kann ich den maximalen (oder minimalen) Wert in einem Vektor in C++ ermitteln? 

Ich habe ein paar Lösungen dafür bei Google gesehen, aber keine davon war für mich sinnvoll :(

Kann jemand auf eine einfache, einfache Noob-Weise erklären, wie man den maximalen oder minimalen Wert von einem Vektor erhält, und bin ich falsch, wenn ich davon ausgehe, dass es mit einem Array mehr oder weniger identisch wäre?

Ich brauche einen Iterator, richtig? Ich habe es mit max_element ausprobiert, aber es wurde ein Fehler angezeigt.

vector<int>::const_iterator it;
it = max_element(cloud.begin(), cloud.end());

error: Anforderung für das Mitglied "begin" in "cloud", das nicht zum Klassentyp "int [10]" gehört

EDIT: Ich konnte meine eigene Antwort nicht beantworten ??? also werde ich es hier setzen ...

Wow, danke für die schnellen Antworten! Ich habe es letztendlich so gemacht, finde ich es ok?

for (unsigned int i = 0; i < cdf.size(); i++)
  if (cdf[i] < cdfMin)
    cdfMin = cdf[i];

wobei cdf ein Vektor ist.

86
bob blob

Sie können dies unter Verwendung von C++ 11/C++ 0x-Kompilierungsflags tun

auto it = max_element(std::begin(cloud), std::end(cloud)); // c++11

Ansonsten schreibe deine eigene:

template <typename T, size_t N> const T* mybegin(const T (&a)[N]) { return a; }    
template <typename T, size_t N> const T* myend  (const T (&a)[N]) { return a+N; }

Live unter http://ideone.com/aDkhW:

#include <iostream>
#include <algorithm>

template <typename T, size_t N> const T* mybegin(const T (&a)[N]) { return a; }    
template <typename T, size_t N> const T* myend  (const T (&a)[N]) { return a+N; }

int main()
{
    const int cloud[] = { 1,2,3,4,-7,999,5,6 };

    std::cout << *std::max_element(mybegin(cloud), myend(cloud)) << '\n';
    std::cout << *std::min_element(mybegin(cloud), myend(cloud)) << '\n';
}

Oh, und use std::minmax_element(...), wenn Sie beide gleichzeitig benötigen: /

92
sehe

Wenn Sie die Funktion std::max_element() verwenden möchten, müssen Sie Folgendes tun:

double max = *max_element(vector.begin(), vector.end());
cout<<"Max value: "<<max<<endl;

Ich hoffe das kann helfen.

53
Angie Quijano

Lassen,

 #include <vector>

 vector<int> v {1, 2, 3, -1, -2, -3};

Wenn der Vektor aufsteigend oder absteigend sortiert ist, können Sie ihn mit der Komplexität O (1) finden. 

Bei einem Vektor mit aufsteigender Reihenfolge ist das erste Element das kleinste Element. Sie können es durch v [0] (0-basierte Indizierung) erhalten, und das letzte Element ist das größte Element. Sie können es durch v [sizeOfVector-1] erhalten. 

Wenn der Vektor in absteigender Reihenfolge sortiert ist, ist das letzte Element das kleinste Element. Sie können es mit v [sizeOfVector-1] abrufen und das erste Element ist das größte Element. Sie können es mit v [0] abrufen.

Wenn der Vektor nicht sortiert ist, müssen Sie den Vektor durchlaufen, um das kleinste/größte Element zu erhalten. In diesem Fall ist die Zeitkomplexität O (n), hier ist n die Größe des Vektors.

int smallest_element = v[0]; //let, first element is the smallest one
int largest_element = v[0]; //also let, first element is the biggest one
for(int i = 1; i < v.size(); i++)  //start iterating from the second element
{
    if(v[i] < smallest_element)
    {
       smallest_element = v[i];
    }
    if(v[i] > largest_element)
    {
       largest_element = v[i];
    }
}

Sie können Iterator verwenden,

for (vector<int>:: iterator it = v.begin(); it != v.end(); it++)
{
    if(*it < smallest_element) //used *it (with asterisk), because it's an iterator
    {
      smallest_element = *it;
    }
    if(*it > largest_element)
    {
      largest_element = *it;
    }
}

Sie können es im Eingabebereich berechnen (wenn Sie das kleinste oder größte Element eines gegebenen Vektors suchen müssen).

int smallest_element, largest_element, value;
vector <int> v;
int n;//n is the number of elements to enter
cin >> n;
for(int i = 0;i<n;i++)
{
    cin>>value;
    if(i==0)
    {
        smallest_element= value; //smallest_element=v[0];
        largest_element= value; //also, largest_element = v[0]
    }

    if(value<smallest_element and i>0)
    {
        smallest_element = value;
    }

    if(value>largest_element and i>0)
    {
        largest_element = value;
    }
    v.Push_back(value);
}

Sie können auch das kleinste/größte Element durch eingebaute Funktionen erhalten

#include<algorithm>

int smallest_element = *min_element(v.begin(),v.end());

int largest_element  = *max_element(v.begin(),v.end());

Mit diesen Funktionen können Sie das kleinste/größte Element eines beliebigen Bereichs erhalten. sowie,

vector<int> v {1,2,3,-1,-2,-3};

cout << *min_element(v.begin(), v.begin() + 3); //this will print 1,smallest element of first three elements

cout << *max_element(v.begin(), v.begin() + 3); //largest element of first three elements

cout << *min_element(v.begin() + 2, v.begin() + 5); // -2, smallest element between third and fifth element (inclusive)

cout << *max_element(v.begin() + 2, v.begin()+5); //largest element between third and first element (inclusive)

Ich habe Sternchen (*) vor min_element ()/max_element () - Funktionen verwendet. Weil beide den Iterator zurückgeben. Alle Codes sind in C++. 

8
Taohidul Islam

Angenommen, Cloud ist int cloud[10], können Sie dies folgendermaßen tun: int *p = max_element(cloud, cloud + 10);

8
Asha

Sie können es direkt mit der Funktion max_element/min_element .. ausdrucken.

  cout<<*max_element(v.begin(),v.end());

  cout<<*min_element(v.begin(),v.end());
5
Kishy Nivas

In C++ 11 können Sie einige Funktionen wie diese verwenden:

int maxAt(std::vector<int>& vector_name) {
    int max = INT_MIN;
    for (auto val : vector_name) {
         if (max < val) max = val;
    }
    return max;
}
4
brenorodrigues

Sie können max_element verwenden, um den Maximalwert im Vektor ..__ abzurufen. Das max_element gibt einen Iterator auf den größten Wert im Bereich zurück oder den letzten Wert, wenn der Bereich leer ist. Da ein Iterator wie Zeiger ist (oder Zeiger als eine Form von Iterator bezeichnet werden kann), können Sie vor dem Wert den Wert * verwenden, um den Wert zu erhalten. So kann das maximale Element in einem Vektor als

int max=*max_element(cloud.begin(), cloud.end());

Es gibt Ihnen das maximale Element in Ihrem Vektor "Wolke" . Hoffe, es hilft.

1

Wenn Sie einen Iterator verwenden möchten, können Sie ein placement-new mit einem Array ausführen.

std::array<int, 10> icloud = new (cloud) std::array<int,10>;

Beachten Sie das Fehlen eines () am Ende, das ist wichtig. Dadurch wird eine Array-Klasse erstellt, die diesen Speicher als Speicher verwendet und über STL-Funktionen wie Iteratoren verfügt.

(Dies ist übrigens C++ TR1/C++ 11)

1
std''OrgnlDave

Mein Weg, den max oder min - Wert in einem Vector zu finden, ist sehr einfach. 

  • Zuerst sortiere ich den Vektor mitsort ()STLvon C++ .
  • Für den minimalen Wert nehme ich das erste Element des sortierten Vektors.
  • Für den Maximalwert nehme ich den letzten Wert des sortierten Vektors.

Unten ist ein einfacher Code 

    sort(myVector.begin(),myVector.end());

    int minimunValue = myVector[0];
    int maximumValue = myVector[myVector.size()-1];

    cout<<minimunValue<<" "<<maximumValue<<endl;
0