push_back vs emplace_back: cuál es la diferencia y qué elegir en C++?
¡Hola, colegas! Recientemente comencé a estudiar C++11 y me topé con el método emplace_back de std::vector. Antes siempre usaba push_back para agregar elementos, pero ahora veo que apareció una alternativa. Leí varios artículos, pero no terminé de entender cuál es la diferencia fundamental.
Aquí hay un ejemplo simple que escribí para probar:
```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;
// Opción 1: push_back
people.push_back(Person("Alice", 30));
// Opción 2: emplace_back
people.emplace_back("Bob", 25);
}
```
Ambas opciones funcionan, pero noté que emplace_back acepta los argumentos del constructor directamente, mientras que push_back requiere un objeto temporal. Parece que emplace_back es más conveniente, pero en todas partes escriben que push_back sigue siendo relevante.
Mis preguntas:
1. ¿Cuándo es emplace_back realmente más eficiente que pu