Sobes.tech
Middle

Element əlavə olunduqda vektor (std::vector) ilə nə baş verir?

sobes.tech Süni İntellekt

AI-dan cavab

std::vector-ə element əlavə edərkən (məsələn, push_back istifadə etməklə), aşağıdakı addımlar baş verir:

  1. Yaddaş tutumunun yoxlanması: Vektor hazırda ayrılmış yaddaşın (tutum) yeni element üçün kifayət edib-etmədiyini yoxlayır.
  2. Əgər lazım olsa, genişləndirmə:
    • Əgər size() < capacity(), yeni element sadəcə növbəti boş yerə yerləşdirilir və size() 1 artırılır.
    • Əgər size() == capacity(), vektor tutumunu artırmalıdır. Bu adətən yeni, daha böyük yaddaş bloku ayırmaqla edilir. Yeni blokun ölçüsü adətən mövcud ölçüdən bir neçə dəfə çox olur (məsələn, ikiqat artırılır).
  3. Elementlərin köçürülməsi/hərəkət etdirilməsi (genişləndirmə zamanı): Köhnə yaddaş blokundakı bütün mövcud elementlər köçürülür (və ya hərəkət etdirilir, əgər element tipi hərəkət etməyi dəstəkləyirsə və uyğun konstruktor/operatör mövcuddursa) yeni blokda.
  4. Yeni elementin yerləşdirilməsi: Yeni element yeni yaddaş blokunun sonuna əlavə olunur.
  5. Köhnə yaddaşın sərbəst buraxılması: Köhnə yaddaş bloku sərbəst buraxılır.
  6. İşarəçilərin/ölçülərin yenilənməsi: Daxili işarəçilər (başlanğıc və son göstəriciləri, həmçinin ayrılmış yaddaşın sonu) yenilənir və size() dəyəri də artırılır.

Bu əməliyyat yaddaşın yenidən ayırılması, elementlərin köçürülməsi/hərəkət etdirilməsi və köhnə yaddaşın sərbəst buraxılması səbəbindən baha başa gələ bilər. Bu həmçinin vektorun elementlərinə işarə edən iteratorları və istinadları əvvəlki vəziyyətə görə etibarsız edə bilər.