I C relativly bin neu ++ und dies könnte eine dumme Frage, aber ich versuche rValue
und lValue
Referenzen im Moment zu verstehen, und das kam mir in den Sinn:C++ Karte kopieren mit std vector :: bewegen
Nehmen wir an, wir haben eine Karte (die aus einer Datenbank oder was auch immer kommt) und wir wollen alle Werte davon in einen Vektor kopieren.
void insertItems(std::vector<std::string>& v)
{
std::map<int, std::string> names = loadFromDb();
for (auto& kv : names)
{
v.push_back(std::move(kv.second));
}
}
Ist es richtig, std::move
hier zu verwenden? std::string
bietet einen Move-Konstruktor und (möglicherweise nicht für String, aber für größere Objekte) ist der Move-Konstruktor viel schneller als der Copy-Konstruktor. Wir wissen auch, dass wir die Elemente der Karte nicht woanders verwenden und dass sie außerhalb des Gültigkeitsbereichs liegen, sobald wir die Funktion verlassen. So ist meine Vermutung richtig?
Ich kann keinen Widerspruch in meinen Gedanken sehen, aber es ist ein kompliziertes Thema und ich habe Angst etwas zu verpassen. S.S .: Ich denke, der Name der Frage ist nicht der beste. Wenn Sie einen besseren haben, können Sie ihn gerne bearbeiten.
Die Implementierung ist korrekt. Eine 'v.reserve' ist eine andere Optimierung zu tun. – Jarod42
Oh, und bedenke, dass 'v' kein Zeiger ist. –
Oh ja danke, du hast absolut recht. Ich habe das korrigiert – Cilenco