如何使用stringstream写入?

Rel*_*lla 4 c++ stl vector stringstream

我有一些vector<char>我想写的数据std::stringstream.

我试过了:

my_ss.write(vector.data(), vector.size());
Run Code Online (Sandbox Code Playgroud)

......但它似乎没有说明my_ss我声明如下:

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

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

Fle*_*exo 8

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

std::copy(vector.begin(), vector.end(), std::ostream_iterator<char>(my_ss));
Run Code Online (Sandbox Code Playgroud)

完整的例子:

#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;
}
Run Code Online (Sandbox Code Playgroud)

您也可以直接使用它来构建一个string,而不是通过一个stringstream:

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


Hos*_*ork 5

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

std::stringstream my_ss (std::stringstream::binary);
Run Code Online (Sandbox Code Playgroud)

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

std::stringstream my_ss (std::stringstream::out | std::stringstream::binary);
Run Code Online (Sandbox Code Playgroud)

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

更新既然您已经给出了代码...是的,这是您的具体问题。请注意@awoodland 关于您可以仅从字符向量构造字符串这一事实的观点(如果这是您计划使用此流做的唯一事情。)