比较 std::stringstream 的内容

Compare content of std::stringstream

我有两个 std::stringstreamss1ss2,它们作为参数提供给两个用数据填充它们的不同函数。

我想检查这些函数是否写入了相同的内容。如何测试两个 std::stringstream?

是否相等
alg1.print(ss1);
alg2.print(ss2);

if(ss1 != ss2) {
   cout << "Content not identical!" << endl;
}

无效。将它们都转换为 str() 可行,但这似乎无效。一定有更好的办法吧?

我认为唯一的方法是使用 .str() 方法:

if (ss1.str() != ss2.str()) {
  cout << "Content not identical!" << endl;
}

我不确定这是否特别快,但除非您处于嵌入式上下文中或者您每秒检查数百万次比较,否则这无关紧要。

在这种情况下使用str()应该没有错。如果您担心缓冲区会非常大,并且 str() 会有大量的复制开销,也许您可​​以使用 >> 运算符或其他允许您的成员函数之一提取较小的流块,并逐步执行比较。也许您更喜欢它而不是单个整体副本。