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 подскажет развёрнутый ответ в реальном времени.