Ich fragte mich, was sind die Unterschiede zwischen den beiden. Ich bemerke, dass emplace C++ 11 zusätzlich ist. Also warum die Zugabe?C++ std :: Vektor emplace vs einfügen
21
A
Antwort
84
Emplace nimmt die Argumente, die notwendig sind, um ein Objekt an der richtigen Stelle zu konstruieren, wohingegen insert ein Objekt aufnimmt (eine Referenz darauf).
struct Foo
{
Foo(int n, double x);
};
std::vector<Foo> v;
v.emplace(someIterator, 42, 3.1416);
v.insert(someIterator, Foo(42, 3.1416));
21
insert
kopiert Objekte in den Vektor.
emplace
konstruieren sie innerhalb des Vektors.
Verwandte Themen
- 1. push_back vs emplace vs Einfügen in Vektor in C++
- 2. C++ push_back vs Einfügen vs emplace
- 3. Vektor vs Array Leistung
- 4. Initialisierungsliste vs. Vektor
- 5. make_shared and emplace Funktionen
- 6. Einen C++ std :: Vektor ohne Kopie zurückgeben?
- 7. C++ mit std :: Vektor über Grenzen
- 8. C++ std :: Vektor-Performance [Referenz erforderlich]
- 9. std :: Vektor im Vergleich zu std :: Array in C++
- 10. Mehrere Werte in Vektor einfügen
- 11. C# Task.Run() vs. C++ std :: async()
- 12. Vektor von std :: fädelt
- 13. Vektor klar vs Größe
- 14. std :: for_each und std :: Vektor Destruktor Aufruf
- 15. std :: unordered_map :: emplace Problem mit privaten/gelöscht Copykonstruktor
- 16. std :: unique_ptr vs std :: shared_ptr vs std :: weak_ptr vs std :: auto_ptr vs raw Zeigern
- 17. Karte bewegen emplace mit lvalue
- 18. Std :: Vektor und Speicherzuweisung
- 19. std :: Vektor nicht ausnahmesicher?
- 20. Std :: Vektor der Funktionen
- 21. Std-Vektor-Größenanpassung
- 22. Returning std :: Vektor nach Wert
- 23. Stxxl Vektor als Tropfenersatz für Std :: Vektor
- 24. C++ std :: map oder std :: set - effizient Duplikate einfügen
- 25. Unterschied zwischen Vektor :: begin() und std :: begin()
- 26. C++ generisch einfügen in Std-Container?
- 27. std :: konditional vs std :: enable_if
- 28. Std :: unordered_map Vektor-Index außerhalb des Bereichs
- 29. Std :: Thread-Klasse vs Std :: this_thread Namespace in C++?
- 30. Adresse von std :: Vektor selbst stabil?
Beachten Sie, dass in C++ 11 'einfügen' nicht kopiert werden muss, es kann auch verschoben werden. – juanchopanza
Es ist erwähnenswert, dass sich die Einfügung verschieben kann, wenn sie einen rvalue-Cast verwendet, möglicherweise nicht. Daher empfiehlt Scott Meyer, emplace wann immer möglich zu verwenden, um die Leistung zu verbessern. – jeremyong