Sobes.tech
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:

  1. 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.
  2. 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 a size() 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).
  3. 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).
  4. Az új elem elhelyezése: Az új elem hozzáadódik az új memória blokk végéhez.
  5. Régi memória felszabadítása: A régi memória blokk felszabadul.
  6. 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.