c++ - 将 streambuf 的内容复制到字符串

标签 c++ string boost boost-asio streambuf

显然 boost::asio::async_read 不喜欢字符串,因为 boost::asio::buffer 的唯一重载允许我创建 const_buffer,所以我一直坚持将所有内容读入 streambuf。
现在我想将 streambuf 的内容复制到一个字符串中,但它显然只支持写入 char* (sgetn()),使用 streambuf 创建一个 istream 并使用 getline()

有没有其他方法可以在不过度复制的情况下使用流缓冲区内容创建字符串?

最佳答案

不知道算不算“过度复制”,不过你可以用一个stringstream:

std::ostringstream ss;
ss << someStreamBuf;
std::string s = ss.str();

例如,要将标准输入中的所有内容读入字符串,请执行

std::ostringstream ss;
ss << std::cin.rdbuf();
std::string s = ss.str();

或者,您也可以使用 istreambuf_iterator。您将不得不衡量这种方式或上述方式是否更快 - 我不知道。

std::string s((istreambuf_iterator<char>(someStreamBuf)), 
               istreambuf_iterator<char>());

请注意,上面的 someStreamBuf 是用来表示一个 streambuf* 的,因此请根据需要取其地址。还要注意最后一个示例中第一个参数周围的附加括号,这样它就不会将其解释为返回字符串并采用迭代器和另一个函数指针的函数声明(“最令人烦恼的解析”)。

关于c++ - 将 streambuf 的内容复制到字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12767800/

相关文章:

c++ - boost::random 每次生成相同的数字

python - 比较 Boost.Odeint 与 Scipy.integrate.odeint?

c++ - 为什么要私下继承基类,还要名字publicizing?

Python 计数子串

使用字符串文字处理 char * init 时崩溃,但使用 malloc 时不崩溃

c++ - printf boost :tuple

c++ - ‘t’ 声明中的两种或多种数据类型

c++ - 为什么 strcmp 没有 SIMD 优化?

python - pytorch torch.jit.trace 返回函数而不是 torch.jit.ScriptModule

c - 在 C 中查找字符串中的最短前缀