6

我是在性能方面问的。stringstream 只是一个字符串/向量,因此写入它可能会导致其整个内容被复制到更大的内存块中,还是以更棘手的方式完成(例如,字符串列表或其他)?

4

2 回答 2

5

27.7.3/1 说basic_ostringstream使用basic_stringbuf. 我认为 27.7.1.3/8 表示basic_stringbuf通过重新分配缓冲区来腾出空间,甚至不能保证指数增长(因此摊销 O(1) 以追加)。

但是我发现标准的流部分非常难以理解,并且总是有“as-if”规则。所以我不能向你保证deque实际上禁止使用下面的(并在有人要求字符串/缓冲区时合并)。

于 2010-10-31T14:23:06.100 回答
4

如何实现 stringstream(或任何库特性)取决于标准库供应商。您可以查看编译器附带的 sstream 标头,以了解它是如何实现的。理论上就这么多了……

就实践经验和测量结果而言,与其他将数据格式化为字符串的方法相比,ostringstream 通常速度较慢。但是话又说回来,只有在您测量出您想要优化的确实是性能瓶颈之后才进行优化,否则这充其量只是浪费时间。

如果您的测量结果表明 ostringstream 的性能对您来说确实是个问题,请考虑使用Boost.Karma。当然,使用 Boost.Karma 的原因不仅仅是性能,因此如果您要开始编写新代码而不是想使用字符串流修改现有代码,您可能希望从一开始就使用 Karma。

于 2010-10-31T14:32:07.507 回答