積累,我有以下代碼C++與移動而不是複製
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);
我想在這裏是爲了避免字符串拷貝。不幸的是,這不是通過vs2012實現累計來完成的。內部積累調用另一個函數_Accumulate和右值函數在進程中丟失。
據我改爲調用_Accumulate功能,像這樣
string words = _Accumulate(wordArray.begin(), wordArray.end(),
move(test), adder);
我得到預期的性能增益。
必須重寫std庫以考慮右值參數嗎?
有沒有其他一些方法我可以使用積累來完成我想要的東西而不會欺騙太多?
你'test'不是右值。 lambda中的's1'不是右值 –