push_back vs emplace_back: Was ist der Unterschied und was wählt man in C++?
Hallo, Kollegen! Ich habe vor kurzem angefangen, C++11 zu lernen und bin auf die Methode emplace_back bei std::vector gestoßen. Früher habe ich immer push_back zum Hinzufügen von Elementen verwendet, aber jetzt sehe ich, dass es eine Alternative gibt. Ich habe ein paar Artikel gelesen, aber den grundlegenden Unterschied nicht ganz verstanden.
Hier ist ein einfaches Beispiel, das ich zum Testen geschrieben habe:
```cpp
#include
#include
struct Person {
std::string name;
int age;
Person(const std::string& n, int a) : name(n), age(a) {}
};
int main() {
std::vector people;
// Variante 1: push_back
people.push_back(Person("Alice", 30));
// Variante 2: emplace_back
people.emplace_back("Bob", 25);
}
```
Beide Varianten funktionieren, aber mir ist aufgefallen, dass emplace_back die Konstruktorargumente direkt annimmt, während push_back ein temporäres Objekt erfordert. Anscheinend ist emplace_back bequemer, aber überall wird geschrieben, dass push_back immer noch relevant ist.
Meine Fragen:
1. Wann ist emplace_back wirklich effizienter als push_back?