2010-06-09 12 views
12

Ich möchte wissen, ob es möglich ist, einen std :: vector in einen std :: stringstream zu transformieren, indem generische Programmierung verwendet wird und wie kann man so etwas erreichen?C++: Vektor zu stringstream

+0

Diejenigen scheinen, wie völlig unabhängige Arten –

+0

@ Michael Mrozek: Also ich den Inhalt zuweisen soll der Vektor zum Stringstream. – Alerty

+0

Bitte definieren Sie mehr, was Sie mit "transform" meinen. Was sollte in den Stringstream eingefügt werden? Die Vektorelemente? Sollten sie in irgendeiner Weise abgegrenzt sein? –

Antwort

32

Nach Brian Neals Kommentar funktioniert das Folgende nur, wenn der Operator << für das Objekt in std::vector (in diesem Beispiel std::string) definiert ist.

#include <iostream> 
#include <sstream> 
#include <vector> 
#include <string> 
#include <iterator> 

// Dummy std::vector of strings 
std::vector<std::string> sentence; 
sentence.push_back("aa"); 
sentence.push_back("ab"); 

// Required std::stringstream object 
std::stringstream ss; 

// Populate 
std::copy(sentence.begin(), sentence.end(),std::ostream_iterator<std::string>(ss,"\n")); 

// Display 
std::cout<<ss.str()<<std::endl; 
+3

+1 Ja, das ist der sauberste Weg –

+1

+1 nur Crux ist diese Kopie und Ostream_iterator sollte mit Std qualifiziert werden. :) – Skurmedel

+1

@Skurmedel - Ich habe es gesehen, danke :) – Jacob

14

Wenn der Elementtyp des Vektors unterstützt Operator < <, so etwas wie die folgenden kann eine Option sein:

std::vector<Foo> v = ...; 
std::ostringstream s; 
std::copy(v.begin(), v.end(), std::ostream_iterator<Foo>(s));