Back to questions
Junior — Middle
86
Как ведет себя контейнер std::vector, если попытаться добавить элемент, когда его текущий размер достиг предельного значения по capacity?
Answer from AI
sobes.tech AI
Когда в std::vector пытаются добавить элемент с помощью push_back или emplace_back, а текущий размер равен capacity (то есть нет свободного зарезервированного места), происходит следующее:
- Выделяется новый блок памяти с увеличенной емкостью (обычно в 1.5-2 раза больше текущей).
- Существующие элементы копируются или перемещаются в новую область памяти.
- Старый блок памяти освобождается.
- Новый элемент добавляется в вектор.
Это означает, что операция добавления в таком случае может быть дорогой по времени из-за перераспределения памяти и копирования элементов. Поэтому, если заранее известен примерный размер, рекомендуется использовать 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 будет увеличен, произойдет перераспределение