Mediumemplacevector

Чем emplace_back эффективнее push_back?

1Постановка

Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.

2Решение

push_back принимает готовый объект (копию/move), emplace_back — аргументы конструктора и конструирует объект прямо в контейнере, без временного.

std::vector<std::string> v;

v.push_back(std::string("hi"));   // временная string → move в vector
v.emplace_back("hi");             // string конструируется прямо в vector

// multi-arg конструктор — emplace короче
v.emplace_back(5, 'a');           // std::string(5, 'a') = "aaaaa"
  • для move-only типов (unique_ptr) emplace — единственный способ;
  • emplace не видит приоритет initializer_list (нужно явно передать);
  • emplace запрещает narrowing: v.emplace_back(3.14) для vector<int> — ошибка.

3Как отвечать

  • Сначала уточните условия и ограничения, покажите аналитическое мышление.
  • Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
  • Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡

На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.