我刚学会了画家施莱米尔"算法(http://en.wikipedia.org/wiki/Joel_Spolsky#Schlemiel_the_Painter.27s_algorithm)并意识到我可能是施莱米尔。
在我的代码中,我使用std::stringstream
&#39; s operator<<
进行了很多字符串连接。我很尴尬地得知,与strcat
大量使用c式连接的效率非常低。
C ++ std::stringstream
&#39; operator<<
是否使用strcat
?或者它使用更有效的方法?
答案 0 :(得分:2)
ostringstream
由stringbuf
支持,该streambuf
继承自ostringstream
;写入streambuf
时,您正在写入ostringstream
的受控输出序列。根据27.6.2:
2 - 每个序列的特征在于三个指针[...]
- 开始指针,或数组[...]
中的最低元素地址- 下一个指针,或者是当前候选读取或写入的下一个元素地址[...]
- 结束指针,或超出数组末尾的第一个元素地址[...]
因此,strlen
实际上可以持续访问其输出序列的当前末尾。
请注意,无论如何,在输出序列上使用string::operator+=(const string &)
都不起作用,因为允许C ++字符串包含嵌入的空字符。
另请注意,直接字符串连接(ostream
)可能比{{1}}运算符更有效,因为不需要通过虚拟方法。