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