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:
- Yaddaş tutumunun yoxlanması: Vektor hazırda ayrılmış yaddaşın (tutum) yeni element üçün kifayət edib-etmədiyini yoxlayır.
- Ə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).
- Əgər
- 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.
- Yeni elementin yerləşdirilməsi: Yeni element yeni yaddaş blokunun sonuna əlavə olunur.
- Köhnə yaddaşın sərbəst buraxılması: Köhnə yaddaş bloku sərbəst buraxılır.
- İş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.