Junior — Middle
Kako se ponaša kontejner std::vector ako pokušate da dodate element kada njegov trenutni veličina dostigne granicu capacity?
sobes.tech АИ
Одговор од АИ
Када у 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); // сада ће капацитет бити увећан, десиће се реодељивање