2010-06-09 6 views
12

Je veux savoir s'il est possible de transformer un vecteur std :: en un train strings std :: en utilisant une programmation générique et comment peut-on accomplir une telle chose?C++: vecteur pour stringstream

+0

Ces derniers semblent comme des types tout à fait sans rapport avec –

+0

@ Michael Mrozek: Je dois affecter le contenu de le vecteur à la stringstream. – Alerty

+0

Veuillez définir plus ce que vous entendez par "transformer". Que devrait-on insérer dans la stringstream? Les éléments de vecteur? Devraient-ils être délimités d'une manière ou d'une autre? –

Répondre

32

Adaptation du commentaire de Brian Neal, ce qui suit ne fonctionnera que si l'opérateur << est défini pour l'objet dans le std::vector (dans cet exemple, 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 Yep, c'est la façon la plus propre –

+1

+1 seulement crux est cette copie et ostream_iterator devrait être qualifié avec std. :) – Skurmedel

+1

@Skurmedel - Juste vu, merci :) – Jacob

14

Si prend en charge l'opérateur < < type d'élément du vecteur, quelque chose comme ce qui suit peut être une option:

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