Mögliche Duplizieren:
how to “return an object” in C++C++ Vektor, Rückkehr gegen Parameter
Ich frage mich, ob es einen Unterschied zwischen den drei folgenden Ansätze ist:
void FillVector_1(vector<int>& v) {
v.push_back(1); // lots of push_backs!
}
vector<int> FillVector_2() {
vector<int> v;
v.push_back(1); // lots of push_backs!
return v;
}
vector<int> FillVector_3() {
int tab[SZ] = { 1, 2, 3, /*...*/ };
return vector<int>(tab, tab + SZ);
}
in Leistung? – Anycorn
Gehen Sie einfach nach Wert zurück und sorgen Sie sich um die Leistung, wenn Sie das Gefühl haben, dass es tatsächlich ein Problem ist. Dann profiliere es, damit du nicht raten musst. Ich schließe präventiv als [doppelt] (http://stackoverflow.com/questions/3350385/how-to-return-an-object-in-c). – GManNickG
Ich hätte nicht gewählt, um dies als ein Duplikat aus mehreren Gründen zu schließen: (1) Die frühere Frage hatte Besonderheiten über die dynamische Speicherzuweisung, die nicht auf diese Frage zutreffen, und (2) diese Frage ist STL-spezifisch was kann Rufen Sie andere Idiome wie Insert-Iteratoren auf. Außerdem nutzen einige Implementierungen von STL bereits C++ 0x-r-Wert-Referenzen, um das Kopieren zu minimieren. Diese Methode ist in der früheren Frage nicht anwendbar. –