Heim >Backend-Entwicklung >C++ >„push_back' vs. „emplace_back': Wann sollten Sie welche verwenden?

„push_back' vs. „emplace_back': Wann sollten Sie welche verwenden?

Susan Sarandon
Susan SarandonOriginal
2024-12-29 17:22:10185Durchsuche

`push_back` vs. `emplace_back`: When Should You Use Which?

push_back vs emplace_back

Um die Unterschiede zwischen push_back und emplace_back zu verstehen, ist es wichtig, den Unterschied zwischen den verschiedenen Überladungen für push_back zu verstehen.

push_back Überladungen

push_back bietet drei Überladungen zur Verarbeitung verschiedener Datentypen und Referenzen:

  • push_back(const Type& _Val): Empfängt eine Kopie des bereitgestellten Datentyps.
  • push_back(Type& _Val): Verarbeitet einen Verweis auf die tatsächlichen Daten Typ.
  • push_back(Type&& _Val): Akzeptiert einen R-Wert-Verweis auf den Datentyp.

emplace_back-Überladung in MSVC10

In Microsoft Visual C 10 (MSVC10), emplace_back verfügt über eine zusätzliche Überladung:

  • emplace_back(Type&&& _Val): Diese Überladung ist im Wesentlichen redundant und hat keine eindeutige Funktionalität im Vergleich zur Überladung push_back(Type&& _Val).

C 0x's emplace_back Overload

Die echte C 0x-Definition von emplace_back unterscheidet sich erheblich:

  • emplace_back(Args&&&...): Diese Überladung ermöglicht es dem Container, ein Objekt direkt in sich selbst zu konstruieren, indem er eine unterschiedliche Liste von Argumenten verwendet.

Vorteile von emplace_back in C 0x

Die C 0x-Version von emplace_back bietet mehrere Vorteile:

  • Direkte Objektkonstruktion: Es erstellt direkt ein Objekt innerhalb des Containers, ohne zuerst ein temporäres Objekt zu erstellen.
  • Schnellere Leistung : Diese Methode umgeht potenzielle Kopien und Verschiebungen, was besonders in komplexen Szenarien von Vorteil ist, in denen push_back möglicherweise unnötige Kopien einführt oder bewegt sich.

Fazit

In C ist emplace_back eine leistungsstarke Ergänzung zur push_back-Funktion, die eine einfache Konstruktion von Objekten innerhalb eines Containers mithilfe einer variablen Liste von ermöglicht Argumente. Während MSVC10 eine nicht konforme Implementierung von emplace_back bietet, bietet die echte C 0x-Implementierung erhebliche Leistungsvorteile und ermöglicht eine effizientere Konstruktion von Objekten innerhalb von Containern.

Das obige ist der detaillierte Inhalt von„push_back' vs. „emplace_back': Wann sollten Sie welche verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn