Wie kann ich den Maximalwert (oder Minimalwert) in einem Vektor in C ++ ermitteln ?
Ich habe bei Google einige Lösungen dafür gesehen, aber keine davon ergab für mich einen Sinn :(
Kann jemand auf einfache und unkomplizierte Weise erklären, wie man den Maximal- oder Minimalwert von einem Vektor erhält? und irre ich mich, wenn ich annehme, dass es mit einem Array mehr oder weniger dasselbe wäre?
Ich brauche einen Iterator, oder? Ich habe es mit versucht, max_element
aber immer wieder einen Fehler bekommen?
vector<int>::const_iterator it;
it = max_element(cloud.begin(), cloud.end());
Fehler: Anforderung für Mitglied 'begin' in 'cloud', das vom Nicht-Klassentyp 'int [10]' ist.
EDIT: Ich konnte meine eigenen nicht beantworten ??? also werde ich es hier setzen ...
Wow, danke für die schnellen Antworten! Ich habe es so gemacht, denkst du, es ist in Ordnung?
for (unsigned int i = 0; i < cdf.size(); i++)
if (cdf[i] < cdfMin)
cdfMin = cdf[i];
wo cdf
ist ein Vektor.
cloud
es kein STL-Container, sondern einint[10]
. Grundsätzlichcloud
hat kein Mitglied.begin()
. Vielleicht möchten Sie ein einfaches C ++ - Buch erhalten, es sei denn, Sie tun nur diese eine Sache.int[10]
". Wie kann es dann ein Vektor sein?Antworten:
Mit c ++ 11 / c ++ 0x-Kompilierungsflags können Sie
Ansonsten schreiben Sie Ihre eigenen:
Sehen Sie es live unter http://ideone.com/aDkhW :
Oh, und verwenden
std::minmax_element(...)
Sie, wenn Sie beide gleichzeitig benötigen: /quelle
Wenn Sie die Funktion verwenden möchten,
std::max_element()
müssen Sie Folgendes tun:Ich hoffe das kann helfen.
quelle
*
in*max_element
?Lassen,
Wenn der Vektor in aufsteigender oder absteigender Reihenfolge sortiert ist, können Sie ihn mit der Komplexität O (1) finden.
Für einen Vektor 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] und das erste Element mit dem größten Element abrufen. Sie können es mit v [0] abrufen.
Wenn der Vektor nicht sortiert ist, müssen Sie über den Vektor iterieren, 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.
Sie können Iterator verwenden,
Sie können es im Eingabeabschnitt berechnen (wenn Sie das kleinste oder größte Element aus einem bestimmten Vektor finden müssen).
Sie können auch das kleinste / größte Element durch integrierte Funktionen erhalten
Mit diesen Funktionen können Sie das kleinste / größte Element eines beliebigen Bereichs erhalten. sowie,
Ich habe Sternchen (*) vor den Funktionen min_element () / max_element () verwendet. Weil beide den Iterator zurückgeben. Alle Codes sind in c ++.
quelle
min_element
undmax_element
geben Sie einen Iterator zurück , keinen Zeiger. Um technisch korrekt zu sein, ist ein Zeiger jedoch eine Teilmenge eines Iterators. Siehe: stackoverflow.com/questions/2728190/…Angenommen, Cloud ist, dass
int cloud[10]
Sie es so machen können:int *p = max_element(cloud, cloud + 10);
quelle
Sie können es direkt mit der Funktion max_element / min_element drucken. Z.B:
quelle
In c ++ 11 können Sie folgende Funktionen verwenden:
quelle
std::max_element
weil ...?Wenn Sie einen Iterator verwenden möchten, können Sie eine neue Platzierung mit einem Array durchführen.
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)
quelle
Mit max_element können Sie den Maximalwert in vector ermitteln. Das max_element gibt einen Iterator auf den größten Wert im Bereich zurück oder zuletzt, wenn der Bereich leer ist. Da ein Iterator wie Zeiger ist (oder Sie können sagen, dass der Zeiger eine Form des Iterators ist), können Sie ein * davor verwenden, um den Wert abzurufen. Entsprechend dem Problem können Sie das maximale Element in einem Vektor erhalten als:
Es gibt Ihnen das maximale Element in Ihrem Vektor "Wolke". Ich hoffe es hilft.
quelle
Nur das:
quelle
int cloud[10];
und es ist die Verwendung von magischen Zahlen.Der komplette Nooby-Weg ... in C.
quelle
vector
for
Schleife. Insgesamt eine sehr schlechte Antwort.