如何使用stringstream写入?

时间:2011-11-17 14:34:19

标签: c++ stl vector stringstream

我有vector<char>个数据,我想写入std::stringstream

我试过了:

my_ss.write(vector.data(), vector.size());

...但它似乎没有把任何内容放入my_ss,我声明如下:

std::stringstream my_ss( std::stringstream::binary);

为什么写不起作用(应用程序不会崩溃并编译0错误,0警告)?

3 个答案:

答案 0 :(得分:8)

对于“我该怎么做”,您可以使用std::ostream_iterator

std::copy(vector.begin(), vector.end(), std::ostream_iterator<char>(my_ss));

完整示例:

#include <iterator>
#include <sstream>
#include <vector>
#include <iostream>
#include <algorithm>

int main() {
  std::vector<char> vector(60, 'a');
  std::ostringstream my_ss;
  std::copy(vector.begin(), vector.end(), std::ostream_iterator<char>(my_ss));
  std::cout << my_ss.str() << std::endl;
}

您也可以直接使用它来构建string,而无需通过stringstream

std::string str(vector.begin(), vector.end()); // skip all of the copy and stringstream

答案 1 :(得分:4)

虽然你没有给出任何代码,但听起来你可能只是写了:

std::stringstream my_ss (std::stringstream::binary);

如果您希望写入字符串流,则需要在构造函数中组合标记std::stringstream::out。如果我是对的,那么如果你将其改为:

,你会看到工作正常
std::stringstream my_ss (std::stringstream::out | std::stringstream::binary);

(显然,如果您希望从该字符串流中读取,则需要添加std::stringstream::in

更新现在您已经提供了代码......是的,这是您的具体问题。注意@ awoodland关于这样一个事实的观点:你可以用chars的向量构造一个字符串(如果这是你计划用这个流做的唯一的事情。)

答案 2 :(得分:3)

stringstream中stringbuf模式的默认参数是out | in。

explicit basic_stringstream(ios_base::openmode _Mode =
    ios_base::in | ios_base::out)
    : _Mybase(&_Stringbuffer),
        _Stringbuffer(_Mode)
    {   // construct empty character buffer
    }

如果你传递一些像stringstream:binary

这样的东西,你需要添加stringstream :: out

或者只使用std :: ostringstream