jac*_*hab 22 c++ stl stringstream
我std::stringstream广泛使用在我的应用程序中构造字符串和错误消息.在stringstreams通常寿命很短的自动变量.
这样的使用会导致每个变量的堆重新分配吗?我应该从临时stringstream变量转换为类成员变量吗?
在后一种情况下,我该如何保留stringstream缓冲区?(我应该用足够大的字符串初始化它还是有更优雅的方法?)
luk*_*uke 10
你有没有描述过你的执行情况,并发现它们是减速的源头?
考虑他们的用法.它们主要用于代码正常流程之外的错误消息吗?
至于保留空间......
某些实现可能在为字符串流进行任何分配之前保留一个小缓冲区.std :: string的许多实现都是这样做的.
另一种选择可能是(未经测试!)
std::string str;
str.reserve(50);
std::stringstream sstr(str);
Run Code Online (Sandbox Code Playgroud)
您可能会在此gamedev主题中找到更多想法.
编辑:
使用stringstream的rdbuf进行操作也可能是一种解决方案.这种方法可能很容易弄错,所以请确保它是绝对必要的.绝对不优雅或简洁.
尽管“乱搞stringstream 的 rdbuf ...可能很容易出错”,但我还是为了好玩而继续拼凑了一个概念验证,因为没有简单的reserve存储方法一直困扰着我为了stringstream。同样,正如 @luke 所说,您可能最好优化分析器告诉您需要优化的内容,因此这只是为了解决“如果我无论如何都想这样做怎么办?”。
我没有使用stringstream 的 rdbuf,而是制作了自己的 rdbuf ,它的作用几乎相同。它仅实现了最小值,并使用 astring作为缓冲区。不要问我为什么称它为VECTOR_output_stream. 这只是一个快速拼凑在一起的事情。
constexpr auto preallocated_size = 256;
auto stream = vector_output_stream(preallocated_size);
stream << "My parrot ate " << 3 << " cookies.";
cout << stream.str() << endl;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15247 次 |
| 最近记录: |