2010-06-09 17 views
12

Quiero saber si es posible transformar un std :: vector a std :: stringstream usando programación genérica y cómo se puede lograr tal cosa?C++: vector a stringstream

+0

Esos parecen como tipos y ajenos –

+0

@ Michael Mrozek: Así que debería asignar los contenidos de el vector a la corriente de cuerdas. – Alerty

+0

Defina más lo que quiere decir con "transformar". ¿Qué debería insertarse en el flujo de cuerdas? Los elementos del vector? ¿Deberían estar delimitados de alguna manera? –

Respuesta

32

Adaptando el comentario de Brian Neal, lo siguiente solo funcionará si el operador << está definido para el objeto en el std::vector (en este ejemplo, 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í, esa es la manera más limpia –

+1

+1 solo crux es esa copia y ostream_iterator debe calificarse con std. :) – Skurmedel

+1

@Skurmedel - Acabo de verlo, gracias :) – Jacob

14

Si el tipo de elemento del vector de soporte para un operador < <, algo así como lo siguiente puede ser una opción:

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