Что касается образования, то, как вы говорите, я покажу вам, как бы я поступил так. В противном случае, stringstream
действительно путь.
Звучит так, будто вы хотите создать реализацию streambuf, которая затем записывает в вектор / дек. Примерно так (копирование из другого моего ответа, что предназначено для потока / dev / null ):
template<typename Ch, typename Traits = std::char_traits<Ch>,
typename Sequence = std::vector<Ch> >
struct basic_seqbuf : std::basic_streambuf<Ch, Traits> {
typedef std::basic_streambuf<Ch, Traits> base_type;
typedef typename base_type::int_type int_type;
typedef typename base_type::traits_type traits_type;
virtual int_type overflow(int_type ch) {
if(traits_type::eq_int_type(ch, traits_type::eof()))
return traits_type::eof();
c.push_back(traits_type::to_char_type(ch));
return ch;
}
Sequence const& get_sequence() const {
return c;
}
protected:
Sequence c;
};
// convenient typedefs
typedef basic_seqbuf<char> seqbuf;
typedef basic_seqbuf<wchar_t> wseqbuf;
Вы можете использовать это так:
seqbuf s;
std::ostream os(&s);
os << "hello, i'm " << 22 << " years old" << std::endl;
std::vector<char> v = s.get_sequence();
Если вы хотите иметь деку в качестве последовательности, вы можете сделать это:
typedef basic_seqbuf< char, char_traits<char>, std::deque<char> > dseq_buf;
Или что-то подобное ... Ну, я не проверял это. Но, возможно, это тоже хорошо - поэтому, если в нем все еще есть ошибки, вы можете попробовать их исправить.