push_back vs emplace_back: qual a diferença e o que escolher em C++?
Olá, colegas! Recentemente comecei a estudar C++11 e me deparei com o método emplace_back em std::vector. Antes, eu sempre usava push_back para adicionar elementos, mas agora vejo que surgiu uma alternativa. Li alguns artigos, mas não entendi completamente qual é a diferença fundamental.
Aqui está um exemplo simples que escrevi para teste:
```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;
// Opção 1: push_back
people.push_back(Person("Alice", 30));
// Opção 2: emplace_back
people.emplace_back("Bob", 25);
}
```
Ambas as opções funcionam, mas notei que emplace_back aceita os argumentos do construtor diretamente, enquanto push_back requer um objeto temporário. Parece que emplace_back é mais conveniente, mas em todos os lugares escrevem que push_back ainda é relevante.
Minhas perguntas:
1. Quando emplace_back é realmente mais eficiente que pu