gpt4 book ai didi

c++ - 提供高效连接的字符串模板库

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:18:54 25 4
gpt4 key购买 nike

是否有与字符串的 blitz++ 库等效的库(即通过延迟字符串构建直到读取整个表达式来提高字符串构建/操作性能的库)?

Blitz++ 通过模板元编程提高矩阵/vector 运算的速度,在编译时从 A + B + C 等表达式构建“语法树”,然后评估语法树。例如,此方法可以提高字符串连接的性能,因为在看到类似 s1 + s2 + s3 的表达式后,结果的大小将是已知的,这样内存分配和复制可以一步完成,而不是先为s1 + s2分配内存,复制,为(s1 + s2) + s3分配内存,然后再复制。

最佳答案

我知道 QString 使用表达式模板来确定最终字符串的大小并有效地预先分配它。我认为底层代码并不难,并且可以与大多数现有的字符串类一起使用。来自 Qt 4.8 手册:

QStringBuilder uses expression templates and reimplements the '%' operator so that when you use '%' for string concatenation instead of '+', multiple substring concatenations will be postponed until the final result is about to be assigned to a QString. At this point, the amount of memory required for the final result is known. The memory allocator is then called once to get the required space, and the substrings are copied into it one by one.

看看 wiki on the subject有关该技术的示例。

请注意,这确实会干扰诸如 decltype(a+b)auto c = a+b 之类的内容,其中表达式模板 operator+使用,因为返回的类型是代理类型,而不是 ab 的原始类型。

关于c++ - 提供高效连接的字符串模板库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13333564/

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