2010-06-09 10 views
12

我想知道是否有可能使用泛型編程將std :: vector轉換爲std :: stringstream,以及如何完成這樣的事情?C++:vectortringstream

+0

那些看似完全無關的類型 – 2010-06-09 17:10:42

+0

@邁克爾Mrozek:所以我應該分配的內容該向量指向stringstream。 – Alerty 2010-06-09 17:13:18

+0

請定義更多「transform」的含義。什麼應該插入到串流中?向量元素?他們是否應該以某種方式劃定界限? – 2010-06-09 19:24:57

回答

32

根據Brian Neal的評論,如果在std::vector(本例中爲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是的,這是最乾淨的方式 – 2010-06-09 17:15:21

+1

+1只有關鍵是複製和ostream_iterator應該符合std。 :) – Skurmedel 2010-06-09 17:15:38

+1

@Skurmedel - 剛剛看到它,謝謝:) – Jacob 2010-06-09 17:16:55

14

如果向量元素類型支持運算< <,類似於下面的東西可能是一種選擇:

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