2010-06-09 8 views
12

Voglio sapere se è possibile trasformare un std :: vector in uno std :: stringstream utilizzando una programmazione generica e come si può realizzare una cosa del genere?C++: vector to stringstream

+0

Coloro sembrare tipi estranei –

+0

@ Michael Mrozek: Quindi dovrei assegnare il contenuto di il vettore allo stringstream. – Alerty

+0

Si prega di definire più cosa intendi per "trasformare". Cosa dovrebbe essere inserito nello stringstream? Gli elementi vettoriali? Dovrebbero essere delimitati in qualche modo? –

risposta

32

Adattando il commento di Brian Neal, ciò che segue funzionerà solo se l'operatore << è definito per l'oggetto nel(in questo esempio, std::string).

#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 Sì, questo è il modo più pulito –

+1

+1 solo il problema è che la copia e ostream_iterator devono essere qualificati con std. :) – Skurmedel

+1

@Skurmedel - L'ho visto, grazie :) – Jacob

14

Se tipo di elemento del vettore supporta dell'operatore < <, qualcosa di simile a ciò che segue può essere un'opzione:

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