Zugiff auf Inhalt von Vector über Iterator?
-
Hallo,
ich muss leider nochmal nachfragen, weil ich bisher noch nicht mit Iteratoren gearbeitet habe. Ich möchte gern in einer Funktion alle Elemente des Vektors durchforsten und das Element ermitteln, welches als Wert(Value) das Maximum enthält und diese Maximum(Value) auf ne andere Variable speichern.
Wie greife ich aber auf die Elemente zu?Mein Ansatz ist der:
double __fastcall TMTeViewer::GetMaxValue() { for(itValueTimeBegin = vValueTime.begin(); itValueTimeBegin != vValueTime.end(); ++itValueTimeBegin) { if(itValueTimeBegin.value > dMaxValue) { dMaxValue = itValueTimeBegin.value; } else { dMaxValue = dMaxValue; } } return dMaxValue; }
aber das funzt so nicht.
Ich hatte vorher die Variante mit dem Vektor:
double __fastcall TMTeViewer::GetMaxValue() { for(unsigned int x = 0;x<vValueTime.size();x++) { if(vValueTimex].value > maxvalue) { maxvalue = vValueTime[x].value; } else { maxvalue = maxvalue; } } return maxvalue; }
die ging.
Ich hab aber ghört, das es über den Iterator besser und schneller ist, stimmt das? Und wenn ja wie kann ich den oberen Code ändern, damit es funzt, oder gibt es vielleicht noch andere Möglichkeiten das Maximum effektiv zu ermitteln?Vielen Dank schon mal.
-
Hallo,
Versuch mal das
dMaxValue = itValueTimeBegin->value;
-
Danke,
da hätte ich auch drauf kommen können.
-
der else-zweig ist nutzlos.
double __fastcall TMTeViewer::GetMaxValue() { for(itValueTimeBegin = vValueTime.begin(); itValueTimeBegin != vValueTime.end(); ++itValueTimeBegin) if(itValueTimeBegin.value > dMaxValue) dMaxValue = itValueTimeBegin->value; return dMaxValue; }
so isses schon besser. aber warum sind weder itValueTimeBegin noch dMaxValue definiert und dMaxValue nicht initialisiert?
-
Also erstmal würd ich den iterator auch anders nennen, denn er zeigt ja auch nur zu Beginn auf Beginn :D.
Initialisiert wird der so:vector<int>::iterator myIt=myVec.begin();
Danach kannst du mit dem Dereferenzierungsoperator (*) auf das zugreifen, auf was der Iterator zeigt. Im Grunde ähnlich wie mit einem normalen Zeiger:
value = *myIt;
-
Hallo,
also unter der Annahme, dass dMaxValue nicht irgendein spezieller Wert ist, würde ich ja:return *max_element(vValueTime.begin(), vValueTime.end());
vorschlagen.
Ansonsten:
return max(*max_element(vValueTime.begin(), vValueTime.end()), dMaxValue);
-
HumeSikkins schrieb:
Hallo,
also unter der Annahme, dass dMaxValue nicht irgendein spezieller Wert ist, würde ich ja:return *max_element(vValueTime.begin(), vValueTime.end());
vorschlagen.
max sucht den größen (*it), aber der größe (*it).value war gesucht.
-
volkard schrieb:
max sucht den größen (*it), aber der größe (*it).value war gesucht.
Ups. Mein Fehler. Lesen war ja noch nie meine Stärke.