Iteratoren der STL vector
-
Hallo,
ich bin gerade dabei mich in die Standard-Container Klasse vector einzuarbeiten.
Ich möchte gerne in einem Vektor das maximale Element finden. Das funktioniert ganz gut mit dem Algorithmus max_element.
#include <vector> #include <algorithm> typedef vector<int>::iterator it; vector<int> v1(10); //fülle v1: v1 = {10,1,2,3,4,5,6,7,8,9,0} it max = max_element(v1.begin(),v1.end()); int maximum = *it;Der Wert maximum gibt mir nun eine "10" als Maximum zurück. Wie kann ich aber feststellen, dass sich das Maximum an "Nullter" bzw. an erster Stelle im Vektor steht?
Danke und Liebe Grüße
Maya
-
Es muss natürlich *max heißen...

-
Dieser Thread wurde von Moderator/in Jansen aus dem Forum VCL (C++ Builder) in das Forum C++ verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
if(it == vec.begin())dann ist es die erste stelle
-
Bei std::vector ist es einfach

#include <vector> #include <algorithm> int main() { std::vector<int> data(10); // fill data with randome data const std::vector<int>::iterator it_max(std::max_element(data.begin(), data.end()); std::cout << ".Max:\n\t-Position: " << data.begin() - it_max << "\n\t-Wert: " << *it_max << std::endl; }
-
Danke für die schnelle Hilfe.
Klappt teilweise. Man muss nur noch den Absolutbetrag nehmen:
#include <vector> #include <algorithm> void main() { typedef vector<int>::iterator it; vector<int> a(10); for (int i = 0; i < a.size(); i++) { a[i] = random(10);} it max_zeiger = max_element(a.begin(),a.end()); int max = *max_zeiger; int max_pos = abs(a.begin()-max_zeiger); }Vielen Dank
-
Oder einfach max_zeiger - a.begin(), da ein Iterator irgendwo im vector immer "größer/gleich" dem Anfang des Vectors ist. Und ich würd iteratoren auch nicht max_zeiger nennen, weils eben ncht wirklich zeiger sind, aber das nur am Rande.
-
bzw.
size_t max_pos = max_zeiger - data.begin();
-
der vollständigkeit halber erwähne ich auch noch
std::distance(data.begin(), iter)
-
data.begin() - it_max
Wie kann das klappen? Das ergibt doch dann eine Position, die vor dem Vector liegt. Der Absolutbetrag kann da doch auch nciths mehr ändern?!
-
Pointerarithmetik: Nehmen wir mal an
data.begin() : 500 it_max : 505Dann ist data.begin() - it_max == -5. Das Absolute ist dann die Position im Vektor.
Gruß
Don06