Страницы

Поиск по вопросам

четверг, 28 ноября 2019 г.

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

#c++ #c++11 #stl


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


Ответы

Ответ 1



push_back добавляет копию объекта (или обеспечивает перемещение, если возможно), а emplace_back создает объект непосредственно в конце вектора, т.е. без лишнего копирования (или перемещения).

Ответ 2



Проще на примере... 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); } Как видите, push_back'у нужен объект типа элемента (или приводимый). А вот emplace'у просто передаются аргументы, как конструктору. P.S. Понятно, что этим конструктором может быть и копирующий конструктор :) Так что x.emplace_back(Item(0,1,2)); тоже работает.

Комментариев нет:

Отправить комментарий