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. Aber std::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...


Anmelden zum Antworten