Sobes.tech
Назад к вопросам
Junior — Middle
87

Как ведет себя контейнер std::vector, если попытаться добавить элемент, когда его текущий размер достиг предельного значения по capacity?

Ответ от нейросети

sobes.tech AI

Когда в std::vector пытаются добавить элемент с помощью push_back или emplace_back, а текущий размер равен capacity (то есть нет свободного зарезервированного места), происходит следующее:

  1. Выделяется новый блок памяти с увеличенной емкостью (обычно в 1.5-2 раза больше текущей).
  2. Существующие элементы копируются или перемещаются в новую область памяти.
  3. Старый блок памяти освобождается.
  4. Новый элемент добавляется в вектор.

Это означает, что операция добавления в таком случае может быть дорогой по времени из-за перераспределения памяти и копирования элементов. Поэтому, если заранее известен примерный размер, рекомендуется использовать reserve для выделения необходимой емкости.

Пример:

std::vector<int> v;
v.reserve(10); // резервируем место под 10 элементов
for (int i = 0; i < 10; ++i) {
    v.push_back(i); // не будет перераспределения
}
v.push_back(11); // теперь capacity будет увеличен, произойдет перераспределение