std::stringstream 运算符<<使用 strcat 吗?
Does std::stringstream operator<< use strcat?
我刚刚了解了"Schlemiel the painter"算法(http://en.wikipedia.org/wiki/Joel_Spolsky#Schlemiel_the_Painter.27s_algorithm),并意识到我可能就是Schlemiel。
在我的代码中,我用std::stringstream
的operator<<
做了很多字符串连接。我很尴尬地得知大量使用c风格的strcat
连接具有相当大的效率低下。
c++的std::stringstream
的operator<<
使用strcat
吗?还是使用更有效的方法?
ostringstream
由继承自streambuf
的stringbuf
支持;当写入ostringstream
时,您正在写入streambuf
的受控输出序列。根据27.6.2:
2 -每个序列由三个指针表征[…]
- 起始指针,或数组中的最低元素地址[…]
- 下一个指针,或下一个元素地址是当前候选的读或写[…]
- 结束指针,或数组结束后的第一个元素地址[…]
因此,ostringstream
有效地对其输出序列的当前端具有常数时间访问。
请注意,无论如何,在输出序列上使用strlen
是行不通的,因为c++字符串允许包含嵌入的空字符。
还请注意,直接字符串连接(string::operator+=(const string &)
)可能比ostream
操作符更有效,因为不需要通过虚方法。
相关文章:
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- 呼叫运营商<<临时
- 类似于strcat()的函数出现问题
- 如何防止clang格式在流运算符调用之间添加换行符<<
- <<操作员在下面的行中工作
- 使用 strcat 获取缓冲区溢出错误
- 包装器是从 strcat_s() 到 strcat() 吗?如果没有,是否可以创建一个?
- 我的程序不适用于 strcat - 我似乎不明白为什么?
- 这个 absl::StrCat 错误在哪里发生,在 Abseil 或 MSVC 中?
- 如何显式调用运算符<<
- 错误:从 'char' 到 'const char' [-允许] strcat(加密,密钥[i])的转换无效;
- 愚蠢的问题:strcat和char指针
- 字符串函数:strcat()
- 模板操作员&lt;未打电话
- C / CUDA中的模板方法是3个角括号(&lt;&lt;&lt;)
- C - 创建矢量&lt; vector&lt; double&gt;&gt;矩阵具有分配而不是inizializ
- 错误:调用"std::vector<:vector<int>>::p ush_back(std::vector<std::__cxx11::basic_string<
- C 建造者Clang STD :: Sill,找不到超载的操作员&lt;
- 对Strcat和Strlen功能的深刻理解
- 为什么STD :: MAP需要操作员&lt;以及我如何写一个