Ich habe den folgenden CodeC++ mit Bewegung akkumulieren statt Kopie
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);
Was würde Ich mag hier ist String Kopieren zu vermeiden. Leider wird dies durch die vs2012-Implementierung von accum nicht erreicht. Intern akkumulieren ruft eine andere Funktion _Accumulate auf und die Rvalue-Funktionalität geht dabei verloren.
Es nenne ich stattdessen die _Accumulate Funktion wie so
string words = _Accumulate(wordArray.begin(), wordArray.end(),
move(test), adder);
ich die beabsichtigte Leistungsgewinn erhalten.
Muss die Std-Bibliothek neu geschrieben werden, um rvalue-Argumente zu berücksichtigen?
Gibt es eine andere Art, wie ich mich ansammeln kann, um zu erreichen, was ich will, ohne zu viel zu betrügen?
Ihre 'test' ist kein rvalue. Das 's1' in Lambda ist kein rvalue –