std::string Concatenate(const std::string& s1,const std::string& s2,const std::string& s3,const std::string& s4,const std::string& s5){ return s1 + s2 + s3 + s4 + s5;}
默认情况下,返回s1 s2 s3 s4 s5;可能等同于以下代码:
auto t1 = s1 + s2; // Allocation 1auto t2 = t1 + s3; // Allocation 2auto t3 = t2 + s4; // Allocation 3return t3 + s5; // Allocation 4
有一种优雅的方法可以将分配时间减少到1吗?我的意思是保持返回s1 s2 s3 s4 s5;没有改变,但效率自动提高.如果可能的话,它也可以避免程序员误用std :: string :: operator.
ref-qualifIEr成员函数有帮助吗?
解决方法 问题的前提是:s1 + s2 + s3 + s4 + s5 + ... + sn
将要求n分配不正确.
相反,它将需要O(Log(n))分配.第一个s1 s1将生成一个临时的.随后,临时(rvalue)将成为所有后续 *** 作的左参数.该标准指定当字符串的lhs是rvalue时,该实现只是附加到该临时值并将其移出:
operator+(basic_string<charT,traits,Allocator>&& lhs,const basic_string<charT,Allocator>& rhs);Returns: std::move(lhs.append(rhs))
该标准还规定了字符串的容量将在几何上增长(通常在1.5和2之间).因此,在每次分配时,容量将以几何方式增长,并且该容量沿着 *** 作链传播.更具体地说,原始代码:
s = s1 + s2 + s3 + s4 + s5 + ... + sn;
实际上相当于:
s = s1 + s2;s += s3;s += s4;s += s5;// ...s += sn;
当几何容量增长与短串优化相结合时,“预先保留”正确容量的值是有限的.如果这样的代码实际上显示为性能测试中的热点,我只会费心去做.
总结以上是内存溢出为你收集整理的如何在C 14中提高“str1 str2 str3 ……”的效率?全部内容,希望文章能够帮你解决如何在C 14中提高“str1 str2 str3 ……”的效率?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)