Sobes.tech
Middle

Ҳангоми илова кардани унсур вектор (std::vector) бо чӣ рӯй медиҳад?

sobes.tech AI

Ҷавоб аз AI

std::vector-и элемент илова кардан (масалан, бо ёрии push_back) қадамҳои зеринро мегузаронанд:

  1. Таҳқиқи иқтидор: Вектор санҷида мешавад, ки оё ёдгории дар ҳозир тақсимшуда (иқтидор) барои ҷойгир кардани як элемент нав кофӣ аст.
  2. Тамом кардан, агар лозим бошад:
    • Агар size() < capacity(), элемент нав ба осонӣ дар ҷойи озодии оянда ҷойгир карда мешавад ва size() ба 1 меафзояд.
    • Агар size() == capacity(), вектор бояд иқтидори худро зиёд кунад. Ин одатан бо тақсим кардани як блоки ёдгории нав ва калонтар анҷом дода мешавад. Андозаи блоки нав одатан чанд маротиба аз ҳозира калонтар аст (масалан, ду баробар).
  3. Нусхабардорӣ/мувофиқсозии элементҳо (дар вақти васеъшавӣ): Ҳамаи элементҳои мавҷуда аз блоки кӯҳна нусхабардорӣ (ё ҳаракат дода мешаванд, агар навъи элемент ҳаракатро дастгирӣ кунад ва конструктор/оператори мувофиқ мавҷуд бошад) ба блоки нав.
  4. Ҷойгир кардани элемент нав: Элемент нав ба охири блоки нав илова карда мешавад.
  5. Раҳнамоии ёдгории кӯҳна: Блоки ёдгории кӯҳна озод карда мешавад.
  6. Навсозии ишораҳо/андозаҳо: Ишораҳои дохилӣ (ки ба оғоз ва охири маълумотҳо, инчунин ба охири ёдгории тақсимшуда ишора мекунанд) навсозӣ мешаванд, ва арзиши size() низ афзоиш меёбад.

Ин амал метавонад гарон бошад, бо сабаби эҳтимоли такрори ёдгории нав, нусхабардорӣ/мувофиқсозии элементҳо ва озод кардани ёдгории кӯҳна. Инчунин метавонад итераторҳо ва истинодҳоро нодуруст кунад, ки ба элементҳои вектор пеш аз илова кардан ишора мекарданд.