Junior — Middle
117
Pouvez-vous expliquer le mécanisme de redistribution de la mémoire à l'intérieur du conteneur std::vector lors de l'ajout de nouveaux éléments?
Réponse de l'IA
sobes.tech IA
В std::vector при добавлении новых элементов, если текущая емкость (capacity) вектора недостаточна, происходит перераспределение памяти:
- Выделяется новый блок памяти большего размера (обычно в 2 раза больше текущей емкости) для хранения элементов.
- Существующие элементы копируются или перемещаются в новый блок памяти.
- Старый блок памяти освобождается.
Это позволяет вектору динамически расширяться, сохраняя элементы в непрерывном блоке памяти для эффективного доступа. Однако перераспределение — дорогая операция, поэтому рекомендуется заранее резервировать необходимый объем с помощью reserve(), если известен ожидаемый размер.
Пример:
std::vector<int> v;
v.reserve(10); // резервируем память под 10 элементов
for (int i = 0; i < 10; ++i) {
v.push_back(i); // не будет перераспределения памяти
}