Middle
Mi történik a vektorral (std::vector), amikor egy elemet hozzáadunk?
sobes.tech MI
Válasz az MI-től
Amikor egy elemet adunk hozzá a std::vector-hoz (például a push_back segítségével), a következő lépések történnek:
- Kapacitás ellenőrzése: A vektor ellenőrzi, hogy a jelenleg kiosztott memória (kapacitás) elegendő-e egy új elem elhelyezéséhez.
- Bővítés szükség esetén:
- Ha
size() < capacity(), az új elem egyszerűen a következő szabad helyre kerül, és asize()1-gyel növekszik. - Ha
size() == capacity(), a vektornak növelnie kell a kapacitását. Ez általában egy új, nagyobb memória blokk lefoglalásával történik. Az új blokk mérete általában többszöröse a jelenleginek (például megduplázódik).
- Ha
- Elemek másolása/mozgatása (bővítéskor): Minden létező elem az régi memória blokkban másolódik (vagy mozgatódik, ha az elem típus támogatja a mozgatást és van megfelelő konstruktor/operátor).
- Az új elem elhelyezése: Az új elem hozzáadódik az új memória blokk végéhez.
- Régi memória felszabadítása: A régi memória blokk felszabadul.
- Mutatók/méretek frissítése: A belső mutatók (amelyek a kezdő és végpontokra, valamint a lefoglalt memória végére mutatnak) frissülnek, és a
size()értéke is növekszik.
Ez a művelet költséges lehet a memória újrafoglalása, az elemek másolása/mozgatása és a régi memória felszabadítása miatt. Emellett érvénytelenítheti az iterátorokat és a hivatkozásokat, amelyek a vektor elemeire mutatnak az adás előtt.