iterator verwenden
-
hi,
ich möchte gerne einen Iterator außerhalb einer klasse verwenden...hab hier nun eine std::map, ich poste gleich bissi code, damit ihr seht um was es da geht:class Text { private: typedef std::map<size_t, std::string> Text_map; Text_map m_Text; Text_map::iterator it; public: Text_map::iterator getIterator() { return it; } iterator begin() { return m_Text.begin(); } iterator end () { return m_Text.end (); } }; int main() { Text MapText; Text::iterator i = getIterator(); // weiß nicht ob das funktioniert!??? for(i = MapText.begin(); i != MapText.end(); ++i) { std::cout << i->second << std::endl; } return 0; }
ich hoffe ihr wisst was gemeint ist...
bye
-
so funktioniert das:
class Text { private: typedef std::map<size_t, std::string> Text_map; Text_map m_Text; Text_map::iterator it; public: typedef Text_map::iterator iterator; iterator getIterator() { return it; } iterator begin() { return m_Text.begin(); } iterator end () { return m_Text.end (); } }; int main() { Text MapText; Text::iterator i = MapText.getIterator(); for(i = MapText.begin(); i != MapText.end(); ++i) { std::cout << i->second << std::endl; } return 0; }
-
hi, danke! du machst den iterator einfach public...gut gut!
aber ich denke dann braucht man ja kein getIterator() mehr?cu
-
Wenn man den Typ von außen verwenden will, muss er auf von außen zugänglich sein (-> public). Das getIterator liefert einen Iterator, nicht aber den nötigen Typ.
aber ich denke dann braucht man ja kein getIterator() mehr?
Richtig
-
naja, irgendwie ist ja ein iterator auch nur ein pointer? deshalb dachte ich ich da an getIterator...was wäre denn wenn ich einen pointer auf den iterator zurückgebe? wäre dann getIterator sinnvoll?
müsste dann eigentlich so ausschauen:
iterator *getIterator() { return ⁢ }
cu
-
Du willst einen TYP haben. Funktionen/Methoden liefern WERTE. WERTE sind keine TYPEN.
naja, irgendwie ist ja ein iterator auch nur ein pointer? deshalb dachte ich ich da an getIterator...
Verstehe ich nicht. Angenommen, du wolltest einen Zeiger zurückgeben. Wie soll jetzt jemand den Zeiger entgegennehmen, ohne einen Zeiger-Typ verwenden zu dürfen? Genau ist momentan dein Problem.
Du lieferst einen Iterator. Den muss man irgendwo speichern. Dazu muss man einen Typ verwenden, der einen solchen Iterator speichern kann. Diesen Typ willst du aber dem Benutzer vorenthalten -> unmöglich.
-
ingo. schrieb:
Text::iterator i = getIterator(); // weiß nicht ob das funktioniert!??? for(i = MapText.begin(); i != MapText.end(); ++i)
Das ist so überhaupt nicht sinnvoll. Wieso initialisierst du i mit dem it-Member der Klasse, nur um ihm gleich wieder etwas anderes zuzuweisen? Welche Bedeutung hat it? IMHO brauchst du weder it noch überhaupt die getIterator-Funktion.