我有以下代码
auto adder = [](string& s1, const string& s2)->string&&
{
if (!s1.empty())
s1 += " ";
s1 += s2;
return move(s1);
};
string test;
test.reserve(wordArray.size() * 10);
string words = accumulate(wordArray.begin(), wordArray.end(),
move(test), adder);
Run Code Online (Sandbox Code Playgroud)
我想在这里避免字符串复制.不幸的是,这并没有通过vs2012的accumulate实现来实现.内部累积调用另一个函数_Accumulate并且rvalue功能在此过程中丢失.
我改为调用_Accumulate函数
string words = _Accumulate(wordArray.begin(), wordArray.end(),
move(test), adder);
Run Code Online (Sandbox Code Playgroud)
我获得了预期的性能提升.
是否必须重写std库以考虑rvalue参数?
还有其他方法我可以使用积累来完成我想要的而不会作弊太多吗?