可以在不改变其状态的情况下遍历 stringstream 中的字符吗?

Possible to iterate through characters in stringstream without changing its state?

给定一个 stringstream ss,有没有一种巧妙的方法可以在不改变其状态的情况下遍历其中的当前字符?

当然,我可以 stringstream ss2(ss.str()) 然后吃掉 ss2 中的字符,但我希望有一种方法可以避免创建中间字符串,因为我的 ss 可能包含数百万个字符。


背景:我将一些数据编码为ss,并希望在将其写入磁盘文件之前附加一个CRC。它是为了计算我要遍历 ss 的 CRC。道德上的做法可能是子类化 stringstream 并动态维护 CRC,但这对我的直接目的来说太麻烦了。

A​​ std::stringstream 使用 std::stringbuf 作为其流缓冲区。 std::stringbuf 是可搜索的,就像普通文件一样。

您可以随心所欲地遍历缓冲的字符串,然后返回到缓冲区的开头,或者字符串中的某个其他位置,然后将时钟倒回到原来的位置。