如何高效地复制istringstream?

3
还是ostringstream?
istringstream a("asd");
istringstream b = a; // This does not work.

我猜memcpy也行不通。

1
为什么你想关闭这个问题? - Łukasz Lew
1
我也很好奇,有人评论吗? - GManNickG
1
我认为这也是一个有效的问题 :) - Khaled Alshaya
2个回答

7
istringstream a("asd");
istringstream b(a.str());

编辑: 根据您对另一个回复的评论,听起来您可能还想将fstream的整个内容复制到strinstream中。您不需要逐个字符地执行此操作(而且您是正确的--那通常非常慢)。

// create fstream to read from
std::ifstream input("whatever");

// create stringstream to read the data into
std::istringstream buffer;

// read the whole fstream into the stringstream:
buffer << input.rdbuf();

+1 我不知道缓冲区有重载! - Khaled Alshaya
1
是的,这是那些几乎没有人知道的可爱小技巧之一。并不经常有用,但当你需要它所做的事情时,它会让事情变得更加简单。 - Jerry Coffin
2
应该使用 ostringstream 而不是 istringstream,对吗? - Allen George

2

您不能只是复制流,而是需要使用迭代器来复制它们的缓冲区。例如:

#include <sstream>
#include <algorithm>
......
std::stringstream first, second;
.....
std::istreambuf_iterator<char> begf(first), endf;
std::ostreambuf_iterator<char> begs(second);
std::copy(begf, endf, begs);

一个一个字符地复制不是很慢吗? - Łukasz Lew
当输入为文件ifstringstream时,我进行了测量。差异是巨大的。 - Łukasz Lew
1
C++中没有叫做ifstringstream的东西。你能把你写的代码发一下吗? - Khaled Alshaya
为什么要将fstream的内容复制到stringstream中? - Khaled Alshaya

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接