С++: вектор в строковый поток

Я хочу знать, можно ли преобразовать std::vector в std::stringstream с помощью универсального программирования и как это сделать?


person Alerty    schedule 09.06.2010    source источник
comment
Это похоже на совершенно не связанные типы   -  person Michael Mrozek    schedule 09.06.2010
comment
@Michael Mrozek: Итак, я должен присвоить содержимое вектора потоку строк.   -  person Alerty    schedule 09.06.2010
comment
Пожалуйста, уточните, что вы подразумеваете под преобразованием. Что нужно вставить в stringstream? Элементы вектора? Должны ли они быть как-то разграничены?   -  person Brian Neal    schedule 09.06.2010


Ответы (2)


Адаптируя комментарий Брайана Нила, следующее будет работать только в том случае, если оператор << определен для объекта в 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;
person Jacob    schedule 09.06.2010
comment
+1 единственная проблема в том, что copy и ostream_iterator должны быть квалифицированы с помощью std. :) - person Skurmedel; 09.06.2010
comment
Разве вы не согласились бы с тем, что использование пространства имен std было в начале метода?!!! :) - person Robben_Ford_Fan_boy; 09.06.2010
comment
Лол, а может быть и последовательно :) - person Jacob; 09.06.2010
comment
Нет нет нет! Он должен трансформировать вектор! - person Edward Strange; 09.06.2010
comment
@Noah: Лол, ты предлагаешь сменить основу или волшебное зелье :)? - person Jacob; 09.06.2010
comment
Это не удается, если тип элемента вектора не имеет operator<<. Я думаю, что ОП нужно больше указать проблему. - person Brian Neal; 09.06.2010
comment
@David Relihan: Я уверен, что были, но это может сбивать с толку. :) - person Skurmedel; 10.06.2010

Если тип элемента вектора поддерживает оператор‹‹, можно использовать что-то вроде следующего:

std::vector<Foo> v = ...;
std::ostringstream s;
std::copy(v.begin(), v.end(), std::ostream_iterator<Foo>(s));
person Éric Malenfant    schedule 09.06.2010