vector -> iterator Frage
-
// maximale Stringlänge finden size_t max_length = 0; for(std::vector<std::string>::const_iterator it = numbers.begin(); it != numbers.end(); ++it) if(it->length() > max_length) max_length = it->length();Was macht den bitte it->length? Offensichtlich kann man mit it-> auf alle member-Funktionen, des vectors zugreifen, was ich auch sinnvoll finde, weil ein iterator ja sowas wie ein Zeiger auf den Vektor ist. Aber was liefer denn length jetzt zurück? Die Länge vom Iterator bis zum Ende des Vektors oder wie?
Falls ja, wieso kann ich dann max_length nicht einfach mit numbers.length() bestimmen?
-
wenn du einen iterator dereferenzierst erhälst du das element auf das er zeigt. it->length() gibt also die länge des strings auf den der iterator grade verweist
der code berechnet also die Länge des längsten strings im vector.
-
Falsch,
it->gibt dir nicht Zugriff auf den Vektor, sondern Zugriff auf das Element. Ist dasselbe wie(*it).
Man greift also auf die Funktionen vonstd::stringzu und damit ist klar, waslengthdir zurückgeben wird.Noch ein Beispiel:
std::vector<std::string> vec; vec.push_back("hallo"); vec.push_back("welt"); std::vector<std::string>::iterator iter = vec.begin(); iter->length(); // Liefert 5 zurück, da "hallo" aus 5 Zeichen besteht. ++iter; iter->length(); // Liefert 4 zurück, da "welt" aus 4 Zeichen besteht.C++ Referenz: www.cpluplus.com/reference
Grüssli
-
banshee schrieb:
Was macht den bitte it->length? Offensichtlich kann man mit it-> auf alle member-Funktionen, des vectors zugreifen, was ich auch sinnvoll finde, weil ein iterator ja sowas wie ein Zeiger auf den Vektor ist.
Hier unterliegst du schon einigen grafierenden Verständnisproblemen.
Ein Iterator dient zum durchlaufen ("iterieren") über die Vectorelemente.
Mittels des Operator * oder -> greift man über den Iterator auf das entsprechende Element zu. Daher liefert it->length() die Länge des entsprechenden Strings. Ebenso hätte man schreiben können: (*it).length()Ein Zeiger auf den vector ist der Iterator ganz und gar nicht (eher auf seine Elemente, und vorsicht: je nach Container muss es sich nicht um einen Zeiger handeln, beim std::vector ist er es aber in der Regel).
cu André
-
Vielen Dank,
am Ende war das ganze gar nicht sooo weit Weg von meiner Vorstellung, ich sie nur komplett falsch ausgedrückt
