Анализ поведения кода с использованием std::vector

push_back размещает два элемента в динамическом буфере. swap обменивает владение буферами за константное время: поэлементного копирования и нового выделения памяти для обмена не требуется.

Короткий ответ

Что ответить на собеседовании

push_back размещает два элемента в динамическом буфере. swap обменивает владение буферами за константное время: поэлементного копирования и нового выделения памяти для обмена не требуется.

Подробный разбор

Ответ с пояснениями

Условие

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

void vector_method()
{
    std::vector<int> a;
    // ========
    a.push_back(1);
    a.push_back(2);

    std::vector<int> b;
    b.swap(a);
}

Ответ

push_back размещает два элемента в динамическом буфере. swap обменивает владение буферами за константное время: поэлементного копирования и нового выделения памяти для обмена не требуется.

Первое добавление требует места для элемента; второе может вызвать рост ёмкости и перенос первого значения. Точное число выделений и коэффициент роста стандартом не фиксируются.

После b.swap(a) элементы 1 и 2 принадлежат b, а a пуст. На выходе b уничтожает элементы и освобождает буфер. Здесь используются одинаковые стандартные аллокаторы; условия обмена контейнеров с пользовательскими аллокаторами нужно проверять отдельно.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее