Back to questions
Junior — Middle
88
Можете объяснить механизм перераспределения памяти внутри контейнера std::vector при добавлении новых элементов?
Answer from AI
sobes.tech AI
В std::vector при добавлении новых элементов, если текущая емкость (capacity) вектора недостаточна, происходит перераспределение памяти:
- Выделяется новый блок памяти большего размера (обычно в 2 раза больше текущей емкости) для хранения элементов.
- Существующие элементы копируются или перемещаются в новый блок памяти.
- Старый блок памяти освобождается.
Это позволяет вектору динамически расширяться, сохраняя элементы в непрерывном блоке памяти для эффективного доступа. Однако перераспределение — дорогая операция, поэтому рекомендуется заранее резервировать необходимый объем с помощью reserve(), если известен ожидаемый размер.
Пример:
std::vector<int> v;
v.reserve(10); // резервируем память под 10 элементов
for (int i = 0; i < 10; ++i) {
v.push_back(i); // не будет перераспределения памяти
}