emplace_back vs push_back – C++

Não existe diferença em funcionalidade as duas implicam em adicionar itens ao final da estrutura, conforme o exemplo a seguir:

#include <vector>

int main(){
    std::vector<int> vint;
    vint.push_back(1);
    vint.emplace_back(2);
    return 0;
}

A diferença está na declaração das funções, enquanto a push_back espera que você passe o tipo definido como parâmetro, a emplace_back devido ao uso de variadic templates, permite o uso de outra maneira, conforme vamos ver no exemplo a seguir:

#include <vector>
#include <utility>

int main(){
    // estou criando um vetor de pair<int,double>
    std::vector<std::pair<int, double>> vpair;
    vpair.push_back(std::make_pair(1,1.1));
    vpair.emplace_back(2, 2.2);
    return 0;
}

Ou seja, nesse exemplo podemos ver que para adicionar um pair de int e double usando push_back, devemos utilizar a função que criar um pair e usando o emplace_back não precisamos explicitar tipo, simplesmente passar os valores como parâmetro.

Links de Referência

http://en.cppreference.com/w/cpp/language/parameter_pack
https://eli.thegreenplace.net/2014/variadic-templates-in-c/

Tem alguma dúvida ou sugestão? Deixe nos comentários!

Deixe um comentário