Вы используете динамический контейнер, когда ваши данные являются динамическими, или вам нужно передавать данные из разных областей вашей программы.
1 - Динамические данные Допустим, у вас есть список ваших соседей.Они строят новый дом на твоей улице, и ты должен добавить парня в список, но ты выделил достаточно места только для 15 соседей.Эта динамическая память позволит вам увеличить размер этого контейнера.Это не совсем так.Фактически, он находит новый кусок памяти необходимого размера, а затем копирует старый контейнер.
Или другой пример.Допустим, вы пишете программу, которая отслеживает адресную книгу.У одного из ваших пользователей есть десять контактов.Другой пользователь - корпорация, и в этой адресной книге нужно хранить 50 000 сотрудников.Вы не хотите выделять 50000 мест для пользователя, у которого есть десять контактов, поэтому вы точно выделяете, сколько вам нужно.
2 - Передача данных Когда вы выделяете статические данные, они помещаются в стек, а затемнедоступен после выхода из области видимости.Поэтому, если вы вызовете некоторую функцию, которая генерирует ваш массив, а затем передадут адрес памяти массива обратно его вызывающей стороне, вы получите ошибку времени выполнения.Это происходит потому, что после выхода из этой функции массив выходит из области видимости, и поэтому он выталкивается из стека.
Однако, если вы выделяете его динамически, он попадает в кучу и не освобождаетсяДо тех пор, пока вы не освободите его или пока программа не выйдет.Таким образом, вы можете просто сохранить указатель на начало массива и использовать его во всей программе, не беспокоясь о том, что он выйдет из области видимости, пока вы этого не захотите.