Разница между push_back и emplace_back

1,00
р.
Подскажите, в чем разница между старым добрым vector::push_back() и пришедшим в новом стандарте vector::emplace_back()?

Ответ
Проще на примере...
struct Item { int a, b, c Item(int a,int b,int c):a(a),b(b),c(c){} }
int main(int argc, const char * argv[]) { vector x // x.push_back(1,2,3) <- не скомпилируется! x.emplace_back(1,2,3) } <br>Как видите, push_back'у нужен объект типа элемента (или приводимый). А вот emplace'у просто передаются аргументы, как конструктору.
P.S. Понятно, что этим конструктором может быть и копирующий конструктор :) Так что
x.emplace_back(Item(0,1,2))
тоже работает.