Посмотрим, как распределяется память в массиве, при объявлении массива размера n для этого выделяется некий непрерывный блок памяти.
например, когда массив размером 5 объявил, что каждая единица занимает 2 байта, а непрерывный блок памяти, если он начинается с 1000, тогда выделенная память находится в диапазоне от 1000 до 1010.
Здесь непрерывная память после выделения следующей памяти используется другими переменными или любыми другими данными. поэтому следующее 1011 место занято. когда мы пытаемся вставить новый элемент в этот массив. ЦП находит память, которая в два раза больше памяти текущего массива.
предыдущий массив: размер = 5 память = 10 байт
текущий массив: размер = 10 память = 20 байт
мы не можем точно сказать, что он в 2 раза больше, но примерно в 1,5-2 раза.
После нахождения новой памяти обычно в 2 раза больше и указывает ту же переменную на вновь сформированное пространство памяти. Теперь он берет все элементы из предыдущей ячейки памяти и вставляет их в новую ячейку памяти [это означает, что он вставляет все n элементов из предыдущего массива] и вставляет их в новый массив.
После того, как элемент n+1 будет вставлен в (n+1)-е место вновь сформированного массива.
Время, затрачиваемое на вставку (n+1)-го элемента, составляет:
1. Поиск места в памяти
2. Вставка всех предыдущих n элементов занимает время O(n)
3.n+ Вставка 1 элемента занимает O (1).
Всего для вставки n+1 элемента в динамический массив размера n равно n+1
Например, у нас есть массив A[] размера 5:
вставка 0-го элемента A[0]=10 → 1
вставка 1-го элемента A[1]=20 → 1
вставка 2-го элемента элемент A[2]=30 → 1
вставка 3-го элемента A[3]=40 → 1
вставка 4-го элемента A[4]=50 → 1
так что всего пять элементов время вставки составляет O (5).
Теперь, если мы попытаемся вставить 60 в массив, ЦП найдет удвоенный текущий размер и изменит ссылочный адрес A[] размера 10 на новый адрес.
После вставки всех элементов 10,20,30,40,50 в новый массив требуется время O(5). Теперь он вставляет 60 в A[5], и время, затраченное здесь, составляет O(5) + O(1), потому что для вставки 60 ЦП должен найти новую память, вставить старые и 60.
Но с этого момента и до A[9] вставка новых элементов занимает O(1).
То же самое для каждого (n+1)-го элемента при вставке в массив размера n.
Поэтому всякий раз, когда мы пытаемся вставить (n+1)-й элемент в массив размера n. В памяти формируется новое пространство массива, размер которого в 1,5-2 раза превышает размер предыдущего массива, и в него вставляется новый элемент. предыдущий объем памяти уничтожается.