gpt4 book ai didi

c++ - std::stringstream operator<< 使用 strcat 吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:45:23 27 4
gpt4 key购买 nike

我刚刚了解了“画家 Schlemiel”算法 (http://en.wikipedia.org/wiki/Joel_Spolsky#Schlemiel_the_Painter.27s_algorithm),并意识到我可能就是 Schlemiel。

在我的代码中,我用 std::stringstream 做了很多字符串连接的 operator<< .我很尴尬地得知大量使用 c 风格的连接 strcat有相当大的低效率。

C++ 的 std::stringstreamoperator<<使用 strcat ?还是使用更有效的方法?

最佳答案

ostringstreamstringbuf 支持,它继承自 streambuf;当写入 ostringstream 时,您正在写入 streambuf受控输出序列。根据 27.6.2:

2 - Each sequence is characterized by three pointers [...]

  • the beginning pointer, or lowest element address in the array [...]
  • the next pointer, or next element address that is a current candidate for reading or writing [...]
  • the end pointer, or first element address beyond the end of the array [...]

因此 ostringstream 有效地具有恒定的时间访问其输出序列的当前末尾。

请注意,无论如何,在输出序列上使用 strlen 是行不通的,因为 C++ 字符串允许包含嵌入的 nul 字符。

另请注意,直接字符串连接 (string::operator+=(const string &)) 可能比 ostream 运算符更有效,因为没有要求通过虚方法去。

关于c++ - std::stringstream operator<< 使用 strcat 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22538568/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com