给定stringstream ss
,是否有一种巧妙的方法来迭代当前的字符,而不改变其状态?
当然,我可以stringstream ss2(ss.str())
然后吃掉ss2中的字符,但我希望有一种方法可以避免创建那个中间字符串,因为我的ss
可能包含数百万个字符。
背景:我将一些数据编码为ss
,并希望在将CRC写入磁盘文件之前附加CRC。它用于计算我想要遍历ss
的CRC。道德要做的可能是继承stringstream
并保持CRC的速度,但这对于我的直接目的来说感觉太麻烦了。
答案 0 :(得分:5)
std::stringstream
使用std::stringbuf
作为其流缓冲区。 std::stringbuf
可以搜索,就像普通文件一样。
您可以根据心脏的需要迭代缓冲的字符串,然后回到缓冲区的开头,或者回到字符串中的其他位置,然后将时钟倒回到原来的位置。