我有vector<char>
个数据,我想写入std::stringstream
。
我试过了:
my_ss.write(vector.data(), vector.size());
...但它似乎没有把任何内容放入my_ss
,我声明如下:
std::stringstream my_ss( std::stringstream::binary);
为什么写不起作用(应用程序不会崩溃并编译0错误,0警告)?
答案 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