Ausgabe von STL-Containern mittels <<
-
Hallo,
ich würde gerne STL-Container mittels << ausgeben. Also für z.B. vector und map ungefähr so:
template<class T> ostream& operator<<(ostream& s, const vector<T>& v) { for (typename vector<T>::const_iterator it = v.begin(); it != v.end(); ++it) s << *it << " "; return s; } template<class K, class V> ostream& operator<<(ostream& s, const map<K, V>& mp) { for (typename map<K, V>::const_iterator it = mp.begin(); it != mp.end(); ++it) s << (*it).first << " => " << (*it).second << " "; return s; }Inzwischen frage ich mich allerdings, ob es das nicht in irgendeiner Bibliothek gibt; in STL und Boost war ich aber nicht fündig.
Weiss irgendwer was dazu?
-
Ich denke nicht, dass es so etwas gibt, zumal ja die Formatierung von jedem anders gewünscht wird.
Du kommst wahrscheinlich nicht darum herum, den
operator<<zu überladen. Aberstd::for_each()und andere STL-Algorithmen können dir vielleicht beim Iterieren helfen.
-
Container können mit copy und ostream_iterator ausgegeben werden, wenn für den value_type des Containers ein Streaming-Operator existiert.
Beispiel:vector< int > v; // v füllen copy( v.begin(), v.end(), ostream_iterator< int >( cout, " " ) );Bem.: ostream_iterator erfordert #include <iterator>
Gruß
Werner
-
schau mal unter http://www.boost.org/doc/libs/1_36_0/libs/serialization/doc/index.html ob das was für die ichst, die habens zumindest für standardcontainer schon fertig...