比较std::stringstream的内容

Compare content of std::stringstream

本文关键字:stringstream std 比较      更新时间:2023-10-16

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

我想检查一下这些函数是否编写了相同的内容。如何测试两个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()会有大量的复制开销,那么也许您可以使用>>运算符或其他成员函数之一,它允许您提取流中较小的块,并增量执行比较。也许你更喜欢它而不是一个单一的副本。